2016-09-14 8 views
0

Я ищу способ сбора всех счетчиков и метрик отдельных заданий хаоопа, управляемых событиями, для хранения всех этих данных в elasticsearch для последующего поиска и устранения неисправностей и анализа.Сбор счетчиков и метрик отдельных рабочих заданий

В настоящее время я нашел несколько методов, которые могли бы, казалось, чтобы соответствовать требованиям:

  1. Использование метрических экспортеров, особенно, ContainerMetrics, что позволяет получить для каждого контейнера памяти и использование центрального процессора и MRAppMetrics, но один агрегаты все показатели для всех заданий.

  2. Опрос MR History Server с его REST API, который довольно прост, но требует много HTTP-вызовов для сбора всех счетчиков для заданий, задач и их попыток.

  3. Подключив дополнительный обычай EventHandler в случае MRAppMaster «s dispatcher, но MRAppMaster не соответствующие механизмы для регистрации пользовательских обработчиков событий.

  4. Использование черной магии javaagents (java instrumentation api), модификаций байт-кода и аналогичных функций для перехвата всех исполнений метода EventHandler#handle(T). Этот способ должен быть способен решить все требования, но требует дополнительной настройки MR-заданий, разработки и регистрации javaagent и, как правило, представляется довольно сложным.

Итак, я хотел бы спросить, существуют ли еще более простые способы сбора показателей и счетчиков отдельных рабочих заданий?

ответ

1

Вы можете подавать свои показатели любому получателю на самом деле: реализовать свой собственный MetricsSink и настроить hadoop для его использования.

Или вы можете использовать MetricsSink, уже связанный с дистрибутивом Hadoop, например GraphiteSink и получить ваши показатели в Graphite.

Обратите внимание, что некоторые счетчики недоступны до завершения задания (успешно или нет).

Кроме того, вариант 2 также может привести к сбою HistoryServer (когда вы проводите опрос на работу с помощью jillion mappers, это может быть OOM).

+0

Экспорт с метрическими раковинами довольно прост, но как создавать и регистрировать новые источники метрик для сбора, например, пользовательских счетчиков заданий? – szhem

+0

Внедрение MetricsSource также является простым, http://hadoop.apache.org/docs/r2.7.3/api/org/apache/hadoop/metrics2/package-summary.html – patrungel

+0

Как подать этот недавно реализованный MetricsSource на пользовательские счетчики работы? Возьмем в качестве примера MRAppMetrics. Экземпляры этого класса используются непосредственно в [MRAppMaster] (https://github.com/apache/hadoop/blob/release-2.7.1/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client- app/src/main/java/org/apache/hadoop/mapreduce/v2/app/MRAppMaster.java # L190), JobImpl, MapTaskImpl, ReduceTaskImpl и т. д. Таким образом, кажется, что его вряд ли можно подключить пользовательский источник метрики в фреймворк для сбора счетчиков заданий. – szhem