2012-03-01 5 views
0

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

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

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

Спасибо, ответьте!

ответ

3

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

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

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