Примеры CLI HDFS и WEBHDFS + источники документации


CLI HDFS


Примеры получения справочной информации:
hdfs dfs -usage
hdfs dfs -help
hdfs dfs -usage ls
hdfs 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