Map / Reduce Framework
Смотреть работу в Job-Tracker . Здесь вы увидите, сколько времени занимают картографы и редукторы. Типичным примером может быть, если вы делаете слишком много работы в редукторах . В этом случае вы заметите, что картографы заканчивают работу довольно скоро, в то время как редукторы работают вечно.
Также может быть интересно посмотреть, все ли ваши картостроители занимают одинаковое количество времени. Может быть, работа задерживается несколькими медленными задачами? Это может указывать на аппаратный дефект в кластере (в этом случае может быть спекулятивное выполнение) или рабочая нагрузка распределяется недостаточно .
Операционная система
Наблюдайте за узлами (либо с помощью чего-то простого, например top, либо с помощью мониторинга, такого как munin или ganglia ), чтобы определить, является ли ваша работа привязанной к процессору или с привязкой . Если, например, ваша фаза сокращения связана с io, вы можете увеличить количество используемых вами редукторов.
Что-то еще, что вы можете обнаружить здесь, это когда ваши задачи используют много памяти . Если трекерам не хватает оперативной памяти, увеличение количества задач на узел может фактически снизить производительность. Система мониторинга может подсвечивать результирующую замену .
Одиночные задачи
Вы можете запустить Mapper / Reducers отдельно для профилирования. В этом случае вы можете использовать все инструменты, которые вы уже знаете.
Если вы считаете, что проблема с производительностью возникает только при выполнении задания в кластере, вы можете измерить время соответствующих частей кода с помощью System.nanoTime()
и использовать System.outs , чтобы вывести некоторые приблизительные значения производительности.
Конечно, есть также возможность добавления JVM-параметров к дочерним JVM и удаленного подключения профилировщика .