Как скопировать файл из HDFS в локальную файловую систему


135

Как скопировать файл из HDFS в локальную файловую систему. В нем нет физического расположения файла, даже каталога. Как я могу переместить их в мой местный для дальнейшей проверки. Я пробовал через Winscp.

Ответы:


242
  1. bin/hadoop fs -get /hdfs/source/path /localfs/destination/path
  2. bin/hadoop fs -copyToLocal /hdfs/source/path /localfs/destination/path
  3. В браузере укажите HDFS WEBUI ( namenode_machine:50070), перейдите к файлу, который вы собираетесь скопировать, прокрутите страницу вниз и щелкните по загрузке файла .

Perfect Tariq, я понял, нет никакого физического расположения файла под файлом, даже каталога. bin / hadoop dfs -ls / use / hadoop / myfolder Я могу просмотреть файл, откуда я получил информацию, чтобы проверить файл, вы можете скопировать его из HDFS в локальную файловую систему , поэтому я могу переместить их из winscp
Surya

2
Еще раз хочу упомянуть Тарика, большое спасибо за то, что вы уделили нам время и знания. большое спасибо . Вы много поддержали, это вселяет уверенность в нового буйца, такого как я.
Surya

1
Понимаю. Вы можете использовать команду hdfs cat, если хотите увидеть содержимое файла или открыть файл в Интернете. Это избавит вас от загрузки файла на ваш локальный фс. Добро пожаловать. И если вы на 100% удовлетворены ответами на свои вопросы, вы можете отметить их, чтобы другие могли извлечь из этого пользу .. Не только для этого, а в целом.
Tariq

2
Просто чтобы добавить к моему последнему комментарию, если это бинарный файл, cat не покажет вам фактическое содержимое. Для просмотра содержимого двоичного файла вы можете использовать: bin / hadoop fs -text / path / to / file
Tariq

1
Кажется, это ошибка (исправлена). Смотрите ответ.
Tariq

27

В Hadoop 2.0

hdfs dfs -copyToLocal <hdfs_input_file_path> <output_path>

где,

  • hdfs_input_file_path может быть получен из http://<<name_node_ip>>:50070/explorer.html

  • output_path это локальный путь к файлу, куда файл должен быть скопирован.

  • Вы также можете использовать getвместо copyToLocal.


15

Чтобы скопировать файлы из HDFS в локальную файловую систему, можно выполнить следующую команду:

hadoop dfs -copyToLocal <input> <output>

  • <input>: путь к каталогу HDFS (например, / mydata), который вы хотите скопировать
  • <output>: путь к целевому каталогу (например, ~ / Documents)

1
Это не похоже на работу для меня. Всегда говорится, что <input> файл не найден. Я использую экземпляр виртуальной машины Cloudera, который имеет
Cent

@SutharMonil Вы уверены, что файл на самом деле там? Можете ли вы просматривать там через hadoop fs -ls?
Деннис Джаэруддин

6

Вы можете достичь обоих этих способов.

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

Пример:

Мои файлы находятся в /sourcedata/mydata.txt. Я хочу скопировать файл в локальную файловую систему по этому пути / user / ravi / mydata

hadoop fs -get /sourcedata/mydata.txt /user/ravi/mydata/

3

Если ваш исходный «файл» разделен между несколькими файлами (возможно, в результате map-reduce), которые находятся в одном дереве каталогов, вы можете скопировать его в локальный файл с помощью:

hadoop fs -getmerge /hdfs/source/dir_root/ local/destination

Это должно быть принято. Это то, что ищет большинство людей, а не разделенный файл.
Джеймс О'Брайен

2

Это сработало для меня на моем экземпляре виртуальной машины Ubuntu.

hdfs dfs -copyToLocal [каталог hadoop] [локальный каталог]


0

если вы используете докер, вам нужно сделать следующие шаги:

  1. скопируйте файл из hdfs в namenode (hadoop fs -get output / part-r-00000 / out_text). "/ out_text" будет сохранен в namenode.

  2. скопируйте файл из namenode на локальный диск с помощью (docker cp namenode: / out_text output.txt)

  3. output.txt будет в вашем текущем рабочем каталоге


-3
bin/hadoop fs -put /localfs/destination/path /hdfs/source/path 

1
hdfs dfs -put - это команда для передачи файлов из локальной FS в HDFS. hdfs dfs -get - правильный выбор
b_rousseau
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.