Hdfs поставил VS webhdfs

Я загружаю файл размером 28 ГБ в hdfs hadoop с помощью webhdfs, и загрузка занимает ~ 25 минут.

Я попытался загрузить тот же файл с помощью hdfs put, и это заняло ~ 6 минут. Почему такая большая разница в производительности?

Что рекомендуется использовать? Может кто-нибудь объяснить или направить меня на какую-нибудь хорошую ссылку, это будет действительно полезно.

Под нами команда, которую я использую

curl -i --negotiate -u: -X PUT "http://$hostname:$port/webhdfs/v1/$destination_file_location/$source_filename.temp?op=CREATE&overwrite=true"

это перенаправит на адрес узла данных, который я использую на следующем шаге для записи данных.


person chhaya vishwakarma    schedule 23.07.2015    source источник
comment
Можете ли вы также написать свою команду для webhdfs ..?   -  person rbyndoor    schedule 23.07.2015


Ответы (4)


Hadoop предоставляет несколько способов доступа к HDFS.

Все нижеперечисленное поддерживает почти все функции файловой системы:

<сильный>1. Команды оболочки файловой системы (FS): обеспечивают простой доступ к операциям файловой системы Hadoop, а также к другим файловым системам, которые поддерживает Hadoop, например Local FS, HFTP FS, S3 FS.
Для этого требуется hadoop клиент должен быть установлен и предполагает, что клиент записывает блоки непосредственно в один узел данных. Все версии Hadoop не поддерживают все варианты копирования между файловыми системами.

<сильный>2. WebHDFS: он определяет общедоступный HTTP REST API, который позволяет клиентам получать доступ к Hadoop с нескольких языков без установки Hadoop. Преимущество заключается в том, что язык не зависит от языка (curl, php и т. д.).
WebHDFS требуется доступ. на все узлы кластера, и когда некоторые данные считываются, они передаются с исходного узла напрямую, но ** есть накладные расходы на http ** (1) FS Shell, но работает независимо и без проблем с разными кластерами и версиями.

<сильный>3. HttpFS. Чтение и запись данных в HDFS в кластере за брандмауэром. Один узел будет действовать как узел GateWay, через который будут передаваться все данные и производительность. Я считаю, что это может быть даже медленнее, но предпочтительнее, когда необходимо извлечь данные из общедоступного источника в защищенный кластер.

Так что выбирайте правильно!.. Переход вниз по списку всегда будет альтернативой, когда выбор над ним вам недоступен.

person rbyndoor    schedule 23.07.2015
comment
Спасибо, Руби. Не могли бы вы уточнить, почему существует огромная разница в производительности? - person chhaya vishwakarma; 23.07.2015

Hadoop предоставляет API FileSystem Shell для поддержки операций файловой системы, таких как создание, переименование или удаление файлов и каталогов, открытие, чтение или запись файла. Оболочка FileSystem — это Java-приложение, которое использует класс java FileSystem для обеспечения операций FileSystem. FileSystem Shell API создает соединение RPC для операций.

Если клиент находится в кластере Hadoop, это полезно, поскольку он использует схему URI hdfs для подключения к распределенной файловой системе Hadoop, и, следовательно, клиент устанавливает прямое подключение RPC для записи данных в HDFS.

Это хорошо для приложений, работающих в кластере Hadoop, но могут быть случаи использования, когда внешнему приложению необходимо манипулировать HDFS, например, создавать каталоги и записывать файлы в этот каталог или читать содержимое файла, хранящегося в HDFS. Hortonworks разработала API для поддержки этих требований на основе стандартной функциональности REST, называемой WebHDFS.

WebHDFS предоставляет функциональность REST API, где любое внешнее приложение может подключиться к DistributedFileSystem через HTTP-соединение. Неважно, что внешнее приложение Java или PHP.

Концепция WebHDFS основана на операциях HTTP, таких как GET, PUT, POST и DELETE. Такие операции, как OPEN, GETFILESTATUS, LISTSTATUS, используют HTTP GET, другие, такие как CREATE, MKDIRS, RENAME, SETPERMISSIONS, полагаются на HTTP PUT.

Он обеспечивает безопасный доступ для чтения и записи к HDFS через HTTP. В основном он предназначен для замены HFTP (доступ только для чтения через HTTP) и HSFTP (доступ только для чтения через HTTPS). Он использовал схему webhdfs URI для подключения к распределенной файловой системе.

Если клиент находится за пределами кластера Hadoop и пытается получить доступ к HDFS. WebHDFS полезен для этого. Также, если вы пытаетесь подключить две разные версии кластера Hadoop, тогда WebHDFS полезен, поскольку он использует REST API, поэтому он не зависит от версии MapReduce или HDFS.

person Sandeep Singh    schedule 23.07.2015

Разница между доступом HDFS и WebHDFS заключается в масштабируемости из-за дизайна HDFS и того факта, что клиент HDFS разбивает файл на части, находящиеся в разных узлах. Когда клиент HDFS получает доступ к содержимому файла, скрытно он переходит к NameNode и получает список разделенных файлов и их физическое расположение в кластере Hadoop.

Затем он может выполнять DataNodes, живущие во всех этих местах, чтобы параллельно извлекать блоки в разбиениях, передавая содержимое напрямую клиенту.

WebHDFS — это прокси-сервер, находящийся в кластере HDFS, и он накладывается на HDFS, поэтому все данные должны передаваться на прокси-сервер, прежде чем они будут переданы клиенту WebHDFS. По сути, это становится единой точкой доступа и узким местом ввода-вывода.

person Bob H    schedule 04.07.2017

Вы можете использовать традиционный Java-клиентский API (который внутренне используется Linux-командами hdfs).

Из того, что я прочитал здесь.

Производительность Java-клиента и подхода на основе Rest имеют одинаковую производительность.

person Tom Slayer    schedule 15.03.2017