Jak skopiować plik z HDFS do lokalnego systemu plików

135

Jak skopiować plik z HDFS do lokalnego systemu plików. W pliku nie ma fizycznej lokalizacji pliku, nawet katalogu. jak mogę przenieść je do mojego lokalnego w celu dalszych walidacji. jestem wypróbowany przez winscp.

Surya
źródło

Odpowiedzi:

242
  1. bin/hadoop fs -get /hdfs/source/path /localfs/destination/path
  2. bin/hadoop fs -copyToLocal /hdfs/source/path /localfs/destination/path
  3. Skieruj przeglądarkę internetową na HDFS WEBUI ( namenode_machine:50070), przejdź do pliku, który chcesz skopiować, przewiń stronę w dół i kliknij pobierz plik .
Tariq
źródło
doskonały tariq, mam to, nie ma fizycznej lokalizacji pliku w pliku, nawet katalogu. bin / hadoop dfs -ls / use / hadoop / myfolder mogę wyświetlić plik, skąd otrzymałem informacje jako Aby sprawdzić plik, możesz skopiować go z HDFS do lokalnego systemu plików , więc myślę, że mogę je przenieść z winscp
Surya,
2
jeszcze raz muszę wspomnieć o tariq, wielkie dzięki za poświęcenie czasu i wiedzy. wielkie dzięki . Bardzo wspierałeś, to daje dużo pewności siebie nowicjuszom, takim jak ja.
Surya,
1
Widzę. Możesz faktycznie użyć polecenia hdfs cat, jeśli chcesz zobaczyć zawartość pliku lub otworzyć plik w sieci webui. Dzięki temu nie będziesz musiał pobierać pliku do lokalnego systemu plików. Zapraszamy. A jeśli odpowiedzi na Twoje pytania są w 100% satysfakcjonujące, możesz je zaznaczyć, aby inni mogli z nich skorzystać. Nie tylko z tego, ale ogólnie.
Tariq
2
Wystarczy dodać do mojego ostatniego komentarza, jeśli jest to plik binarny, cat nie pokaże rzeczywistej zawartości. Aby wyświetlić zawartość pliku binarnego, możesz użyć: bin / hadoop fs -text / path / to / file
Tariq
1
Wygląda na to, że jest to błąd (naprawiony). Zobacz odpowiedź.
Tariq
27

W Hadoop 2.0,

hdfs dfs -copyToLocal <hdfs_input_file_path> <output_path>

gdzie,

  • hdfs_input_file_path można uzyskać z http://<<name_node_ip>>:50070/explorer.html

  • output_path jest lokalną ścieżką do pliku, do którego plik ma zostać skopiowany.

  • możesz również użyć getzamiast copyToLocal.

Ani Menon
źródło
15

Aby skopiować pliki z HDFS do lokalnego systemu plików, można uruchomić następujące polecenie:

hadoop dfs -copyToLocal <input> <output>

  • <input>: ścieżka do katalogu HDFS (np. / moje dane), który chcesz skopiować
  • <output>: ścieżka do katalogu docelowego (np. ~ / Documents)
Shafiq
źródło
1
Wydaje mi się, że to nie działa. Zawsze mówi, że nie znaleziono pliku <input>. Używam instancji maszyny wirtualnej Cloudera, która ma cent os 6.4
SutharMonil
@SutharMonil Czy na pewno plik faktycznie tam jest? Czy możesz tam przeglądać hadoop fs -ls?
Dennis Jaheruddin
6

możesz osiągnąć na oba te sposoby.

1.hadoop fs -get <HDFS file path> <Local system directory path>
2.hadoop fs -copyToLocal <HDFS file path> <Local system directory path>

Dawny:

Moje pliki znajdują się w /sourcedata/mydata.txt Chcę skopiować plik do lokalnego systemu plików w tej ścieżce / user / ravi / mydata

hadoop fs -get /sourcedata/mydata.txt /user/ravi/mydata/
Ramineni Ravi Teja
źródło
3

Jeśli twój "plik" źródłowy jest podzielony na wiele plików (być może w wyniku mapowania), które znajdują się w tym samym drzewie katalogów, możesz skopiować go do pliku lokalnego za pomocą:

hadoop fs -getmerge /hdfs/source/dir_root/ local/destination
Tytułowy
źródło
Należy to zaakceptować. Tego właśnie szuka większość ludzi, a nie podzielony plik.
James O'Brien
2

To zadziałało dla mnie na mojej maszynie wirtualnej Ubuntu.

hdfs dfs -copyToLocal [katalog hadoop] [katalog lokalny]

Zach
źródło
0

jeśli używasz dockera, musisz wykonać następujące czynności:

  1. skopiuj plik z hdfs do namenode (hadoop fs -get output / part-r-00000 / out_text). „/ out_text” zostanie zapisany w namenode.

  2. skopiuj plik z namenode na dysk lokalny przez (docker cp namenode: / out_text output.txt)

  3. output.txt będzie tam w twoim bieżącym katalogu roboczym

Arslan
źródło
-3
bin/hadoop fs -put /localfs/destination/path /hdfs/source/path 
Maniak Hadoop
źródło
1
hdfs dfs -put to polecenie wysyłania plików z lokalnego FS do HDFS. hdfs dfs -get to właściwa opcja
b_rousseau