Как правильно определить узкие места на карте / сократить количество рабочих мест? - PullRequest
4 голосов
/ 09 марта 2012

В обычной java-разработке, если я хочу повысить производительность приложения, моя обычная процедура - запустить программу с подключенным профилировщиком или, альтернативно, встроить в приложение набор инструментальных меток. В любом случае ближайшая цель - определить «горячую точку» приложения, а затем, чтобы иметь возможность измерить эффект от внесенных мной изменений.

Что является правильным аналогом, когда приложение выполняет задание сопоставления / сокращения, выполняемое в кластере hadoop?

Какие параметры доступны для сбора данных о производительности, когда задания выполняются медленнее, чем можно было бы предсказать из запуска эквивалентной логики в изолированной программной среде разработки?

1 Ответ

2 голосов
/ 09 марта 2012

Map / Reduce Framework

Смотреть работу в Job-Tracker . Здесь вы увидите, сколько времени занимают картографы и редукторы. Типичным примером может быть, если вы делаете слишком много работы в редукторах . В этом случае вы заметите, что картографы заканчивают работу довольно скоро, в то время как редукторы работают вечно.
Также может быть интересно посмотреть, все ли ваши картостроители занимают одинаковое количество времени. Может быть, работа задерживается несколькими медленными задачами? Это может указывать на аппаратный дефект в кластере (в этом случае может быть спекулятивное выполнение) или рабочая нагрузка распределяется недостаточно .

Операционная система

Наблюдайте за узлами (либо с помощью чего-то простого, например top, либо с помощью мониторинга, такого как munin или ganglia ), чтобы определить, является ли ваша работа привязанной к процессору или с привязкой . Если, например, ваша фаза сокращения связана с io, вы можете увеличить количество используемых вами редукторов.
Что-то еще, что вы можете обнаружить здесь, это когда ваши задачи используют много памяти . Если трекерам не хватает оперативной памяти, увеличение количества задач на узел может фактически снизить производительность. Система мониторинга может подсвечивать результирующую замену .

Одиночные задачи

Вы можете запустить Mapper / Reducers отдельно для профилирования. В этом случае вы можете использовать все инструменты, которые вы уже знаете.
Если вы считаете, что проблема с производительностью возникает только при выполнении задания в кластере, вы можете измерить время соответствующих частей кода с помощью System.nanoTime() и использовать System.outs , чтобы вывести некоторые приблизительные значения производительности.
Конечно, есть также возможность добавления JVM-параметров к дочерним JVM и удаленного подключения профилировщика .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...