Как разделить входной набор для лучшего баланса Hadoop?

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

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

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

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


person Solomon Sun    schedule 01.03.2012    source источник


Ответы (1)


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

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

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

person Hari Menon    schedule 01.03.2012