Загрузить файл из кластера HDFS

Я разрабатываю API для использования hdfs в качестве распределенного хранилища файлов. Я сделал REST API для разрешения серверу mkdir, ls, создавать и удалять файлы в кластере HDFS с помощью Webhdfs. Но так как Webhdfs не поддерживает загрузку файлов, есть ли решения для достижения этой цели. Я имею в виду, что у меня есть сервер, который запускает мой REST API и взаимодействует с кластером. Я знаю, что операция OPEN только поддерживает чтение содержимого текстового файла, но предположим, что у меня есть файл размером 300 МБ, как я могу загрузить его из кластера hdfs. У вас, ребята, есть какие-то возможные решения.? Я думал о том, чтобы напрямую пропинговать ноды данных для файла, но это решение имеет недостатки, так как если размер файла составляет 300 МБ, это будет огромной нагрузкой на мой прокси-сервер, поэтому для этого есть потоковый API.

2 ответа

Решение

В качестве альтернативы вы можете использовать streamFile предоставляется API DataNode.

wget http://$datanode:50075/streamFile/demofile.txt

Он не будет читать файл в целом, поэтому нагрузка будет низкой, ИМХО. Я пробовал это, но на псевдо настройке, и она работает нормально. Вы можете просто попробовать свои полностью распределенные настройки и посмотреть, поможет ли это.

Один из способов, который мне приходит в голову, - это использовать прокси-работника, который читает файл с помощью API файловой системы hadoop и создает локальный нормальный файл. И предоставьте ссылку на скачивание этого файла. Недостаток

  1. Масштабируемость прокси-сервера
  2. Файлы могут быть теоретически слишком большими, чтобы поместиться на диск одного прокси-сервера.
Другие вопросы по тегам