Как разделить входной набор для лучшего баланса Hadoop? - PullRequest
0 голосов
/ 01 марта 2012

У меня есть иерархический каталог, в каждом каталоге много файлов, и в каждом текстовом файле много строк URL-адресов. Я хочу загрузить все URL-адреса во всех файлах Hadoop для лучшего баланса.

Например, если у меня есть кластер Hadoop с 1 + 5 узлами и 5 URL-адресами, то есть файл 5-URL-адресов в одном или 1-URL-файл (затем получить 5 файлов) в качестве входных данных лучше баланс?

Я думаю, что Hadoop по умолчанию разделит вход, установленный как блок 64M, для работы ТОЛЬКО на одном узле, не может запустить все 5 ведомых.

Спасибо за ответ!

1 Ответ

3 голосов
/ 01 марта 2012

Если вы не выполняете слишком интенсивные вычисления с каждым URL-адресом, а ваши файлы имеют размер <64 МБ, то вам, вероятно, лучше всего использовать один маппер, работающий на одном узле. В этом случае я бы использовал все URL в одном файловом подходе. </p>

Лучше иметь файлы большего размера, чтобы у каждого картографа было достаточно работы. Если ваши файлы очень маленькие, объедините их, чтобы приблизить общий объем к отметке 64 МБ. Это также позволит хранить больше данных в HDFS, поскольку каждый файл занимает ОЗУ в Namenode для хранения метаданных, а ОЗУ ограничено, поэтому, если вы используете меньшее количество файлов, вы можете поместить больше данных в кластер и ваш Namenode будет использовать меньше оперативной памяти.

Вы также можете попробовать использовать CombineFileInputFormat подход

...