2013-08-27 2 views
0

В настоящее время я работаю с приблизительно 19 гигабайтом данных журнала,повышение производительности при наличии большого количества небольших входных файлов с помощью Pig Latin

и они очень отделено так, чтобы превышать количество входных файлов 145258 (свинья стат) ,

Между выполнением приложения и запуск MapReduce работу в веб-интерфейсе,

огромное количество времени тратится на готовьтесь (около 3 часов?), А затем начинает работу MapReduce.

, а также сама трансформировать работу (через сценарий свиньи) довольно медленно, это занимает около часа.

Логика mapreduce не такая сложная, как группа по действию.

У меня есть 3 datanodes и 1 namenode, 1 вторичный namenode.

Как я могу оптимизировать конфигурацию для улучшения производительности mapreduce?

+0

Включили ли вы 'pig.splitCombination'? Вы использовали 'PigStorage'? – zsxwing

+0

145258 - это много файлов, вы сохраняете их все или удаляете после обработки? Если вы их сохраните, то ваша самая большая проблема будет памятью для NameNode. Попробуйте объединить их в один большой файл, и он решит большинство ваших проблем. – alexeipab

+0

Спасибо за все комментарии, ведь вы, ребята, предлагаете мне объединять файлы с большими размерами. Но реальная проблема заключается в том, что сотни терабайт данных, которые я должен обрабатывать, так или иначе хранятся таким образом (многие небольшие файлы) и около 500 гигабайт, хранятся каждый день. В этом случае размещение больших файлов - еще одна большая проблема ... –

ответ

1

Вы должны установить pig.maxCombinedSplitSize в разумные размеры и убедиться, что для параметра pig.splitCombination установлено значение по умолчанию true.

Где мои данные? на HDFS? на S3? Если данные находятся на S3, вы должны объединить данные в более крупные файлы один раз, а затем выполнить свои скрипты свиньи, иначе в любом случае это займет много времени - S3 возвращает списки объектов с разбивкой по страницам, и требуется много времени для извлечения (также если у вас больше объектов в ведре, и вы не ищете файлы с шаблоном только префикс, hasoop перечислит все объекты (потому что в S3 нет другого варианта).

1

Попробуйте hadoop fs -ls /path/to/files | wc -l и посмотреть, как долго это берет, чтобы вернуться - у вас есть две проблемы:

  1. Обнаружение файлов в процессе - вышеприведенные Ls, вероятно, потребуется большое количество минут, чтобы закончить то каждый файл должен быть запрошен. для его блока s ize, чтобы определить, можно ли его разделить/обработать несколькими картографами.
  2. Сохранение всей информации из вышеперечисленного, скорее всего, приведет к ограничению JVM вашего клиента, вы, вероятно, увидите огромное количество GC, пытающихся назначить, выделять и выращивать коллекцию, используемую для хранения разделенной информации для минимальных расколов 145 тыс.

Как уже было сказано, попробуйте объединить файлы в более разумные размеры файлов (где-то рядом с вами размер блока или его несколько). Возможно, вы можете объединить все файлы за один и тот же час в один объединенный файл (или на день, в зависимости от вашего случая использования).

0

Похоже, проблема в Hadoop больше, чем в Pig. Возможно, вы захотите объединить все мелкие файлы в архив Hadoop и посмотреть, улучшает ли он производительность. Для получения дополнительной информации см. this link
Другим подходом, который вы можете попробовать, является запуск отдельного задания Pig, которое периодически СОЕДИНЯЕТ все файлы журнала в один «большой» файл журнала. Это должно помочь сократить время обработки вашей основной работы.

Смежные вопросы