Примеры CLI HDFS и WEBHDFS + источники документации
CLI HDFS
Примеры получения справочной информации:
hdfs dfs -usagehdfs dfs -helphdfs dfs -usage lshdfs dfs -help lsСписок файлов в каталоге (для рекурсивного списка добавить ключ -R, для отображения размера не в байтах, а в MB\GB добавить ключ -h):
hdfs dfs -ls /data/exampleвывод в формате:
- для файлов:
permissions numberOfReplicas userId groupId sizeOfFile(in bytes) modificationDate(yyyy-MM-dd HH:mm) fileName- для директорий:
permissions - userId groupId sizeOfDirectory(in bytes)modificationDate(yyyy-MM-dd HH:mm) directoryNameПодсчет размера пространства, занимаемого всеми файлами с учетом рекурсии в каталоге (-s summary size):
hdfs dfs -du -h -s /data/exampleСоздать каталог:
hdfs dfs -mkdir /data/example/tmpdir_1Создать вложенные каталоги одной командой:
hdfs dfs -mkdir -p /data/example/tmpdir_1/tmpdir_2Создать файл:
hdfs dfs -touchz /data/example/tmpdir_1/tmpfileРекурсивное удаление данных в каталоге (для удаления минуя корзину добавить -skipTrash):
hdfs dfs -rm -R /data/example/tmpdir_1Загрузить файл с локальной файловой системы в HDFS (-get для копирования в обратную сторону):
hdfs dfs -put tmpfile /data/exampleПоказать содержимое файла:
hdfs dfs -cat /data/example/tmpfileПоказать конец файла:
hdfs dfs -tail /data/example/tmpfileПоказать первые пять строк файла:
hdfs dfs -cat /data/example/tmpfile | head -n 5Создать копию файла:
hdfs dfs -cp /data/example/tmpfile /data/example/tmpfile2Переместить файл:
hdfs dfs -mv /data/example/tmpfile /data/example2Скачать результат объединения двух файлов в локальную файловую систему:
hdfs dfs -getmerge /data/example/tmpfile /data/example2/tmpfile tmpmergefileИзменить параметр "фактор репликации" для файла например на "2" (ожидать завершения выполнения: -w):
hdfs dfs -setrep -w 2 /data/example/tmpfileИнформация по блокам файлаhdfs fsck tmptxt -files -blocks -locationsВ выводе будут в том числе строки вида:
0. BP-981064612-178.146.171.101-1581506447497:blk_1115389119_41650374 len=265 Live_repl=1 [DatanodeInfoWithStorage[188.198.161.247:50010,DS-0dbc060f-de26-42eb-915f-016310326169,DISK]]с id блока (blk_1115389119) и ip ноды (188.198.161.247).
Можно посмотреть информацию по блоку:
hdfs fsck -blockId blk_1115389119 После коннекта на ноду можно физически найти этот блок файла. Получаем путь где искать из конфига HDFS:
hdfs getconf -confKey dfs.datanode.data.dir* Аналогично можно смотреть другие параметры конфигурации HDFS, список доступных в
документацииИ ищем по полученному выше пути интересующий блок:
find /srv/disk2/hadoop/datanode -type f -name blk_1115389119Далее, по найденному пути, можно просмотреть его содержимое (команды выше например: cat, tail).
WEBHDFS (protocol for accessing Hadoop Distributed File System over HTTP)
ДокументацияПример чтения 100B из файла в два этапа (причина двухэтапного чтения заключается в том, что клиенты не могут отправлять данные до перенаправления, подробнее в документации по ссылке выше):
curl -i "http://hdfs-master:50070/webhdfs/v1/data/example/tmptxt?op=OPEN&length=100"В ответ получаем HTTP/1.1 307 TEMPORARY_REDIRECT с ссылкой, откуда можно прочитать файл, вставляем ее в запрос ниже:
curl -i "http://hdfs-node2.name.org:50075/webhdfs/v1/data/example/tmptxt?op=OPEN&namenoderpcaddress=hdfs-master.name.org:8020&length=100&offset=0"в результате получаем вывод 100B файла.
Проблему двухэтапного чтения при использовании curl можно решить ключем -L (автоматический redirect):
curl -L -i "http://hdfs-master:50070/webhdfs/v1/data/example/tmptxt?op=OPEN"Детализированная информация по файлу (права доступа, фактор репликации, дата модификации, размер и проч.):
curl -i "http://hdfs-master:50070/webhdfs/v1/data/example/tmptxt?op=GETFILESTATUS"Изменить фактор репликации (дополнительно указан пользователь, имеющий необходимые права):
curl -i -X PUT
"http://hdfs-master:50070/webhdfs/v1/data/example/tmptxt?user.name=hdfsuser&op=SETREPLICATION&replication=3"Добавить содержимое файла в файл HDFS:
curl -L -i -X POST -T testfile "http://hdfs-master:50070/webhdfs/v1/data/example/tmptxt?user.name=hdfsuser&op=APPEND"
Sept. 3, 2023