2015-09-29 4 views
8

Я работаю над программой Spark Streaming, которая извлекает поток Kafka, делает очень базовое преобразование в потоке и затем вставляет данные в БД (voltdb, если это актуально). Я пытаюсь измерить скорость, с которой я вставляю строки в БД. Я думаю, metrics может быть полезен (с использованием JMX). Однако я не могу найти, как добавить специальные показатели в Spark. Я посмотрел исходный код Spark, а также нашел this thread, но это не работает для меня. Я также включил приемник JMX в файле conf.metrics. Что не работает, я не вижу свои собственные показатели в JConsole.Собственные метрики с искробезопасностью

Может ли кто-нибудь объяснить, как добавить пользовательские показатели (желательно через JMX), чтобы искрообразование? Или, альтернативно, как измерить мою скорость ввода в мою БД (в частности, VoltDB)? Я использую искру с Java 8.

ответ

13

Ok после рытья через source code я нашел, как добавить свои собственные метрики. Это требует 3 вещей:

  1. Создать мой собственный source. Пример: this
  2. Включите раковину Jmx в файле показателей sparkrics.properties. Конкретная строка, которую я использовал, это: *.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink, которые позволяют использовать JmxSink для всех экземпляров.
  3. Зарегистрируйте свой пользовательский источник в системе показателей SparkEnv. Пример того, как сделать можно увидеть here - я на самом деле рассматривать эту ссылку раньше, но пропустил регистрационную часть, которая помешала мне на самом деле видеть мои собственные метрики в JVisualVM

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

Я надеюсь, что это поможет другому

+0

Вы выяснили, как считать что-либо от исполнителей? У меня есть аналогичный usecase, где я пишу на конечную точку HTTP, и я хочу подсчитать кучу вещей от исполнителей, но счетчики не сдвинутся с места. –

+0

Это было на самом деле довольно давно, но, насколько я помню, я отправил свои показатели от исполнителей, использующих показатели кошаги, и у них есть репортер Graphite, и я просто суммировал все в графите. – Gideon

+0

А как хорошо, спасибо за ответ. Мой вариант использования немного отличается, написав мой собственный источник и попытавшись отправить события во внутренний инструмент показателей. –

2

вот отличный учебник, который охватывает все настройки, необходимые для установки MetricsSystem Spark с графититом. Это должно сделать трюк:

http://www.hammerlab.org/2015/02/27/monitoring-spark-with-graphite-and-grafana/

+0

Спасибо Эрик за ваш ответ, это очень полезно! но вы случайно добавили свои собственные показатели в код приложения? Я не говорю о вещах, которые уже отслеживаются искру, но другие вещи, такие как скорость вставки строк в VoltDB внутри каждого раздела? (или любые другие сделанные на заказ показатели в коде). Я борюсь с выполнением пользовательских измерений в моем приложении – Gideon

3

для вставки строк из на основе вставок из VoltDB используйте аккумуляторы - а затем из вашего драйвера вы можете создать слушателя - может быть, что-то вроде этого, чтобы вы начали

sparkContext.addSparkListener(new SparkListener() { 
    override def onStageCompleted(stageCompleted: SparkListenerStageCompleted) { 
    stageCompleted.stageInfo.accumulables.foreach { case (_, acc) => { 

здесь у вас есть доступ к этим строкам комбинированных накопителей, а затем вы можете отправить раковину ..

+0

В конце концов я пошел со сбором показателей для каждого исполнителя и отправил его в Graphana и суммировал всю информацию там. Слушатель - классная идея, хотя :) – Gideon

+0

@ Gideon вы можете расширить это? Вы говорите, что вы отбросили нормальные показатели и сделали работу самостоятельно, или вы заставили их работать? –

+0

Я не выбрал нормальные показатели. Я добавил некоторые собственные собственные показатели для исполнителей Spark. Проблема в том, что для этих настраиваемых показателей мне нужны агрегированные результаты (в основном суммирующие аккумуляторы от разных исполнителей), так что я сделал, чтобы отправить данные от каждого исполнителя Spark к Graphana и агрегировать результаты там – Gideon

3

Groupon есть библиотека под названием spark-metrics, что позволяет использовать простое (Codahale-подобный) API на вашем исполнителей, и результаты возвращаются в драйвер и автоматически регистрируются в существующем реестре показателей Spark. Затем они автоматически экспортируются вместе со встроенными метками Spark при настройке приемника метрики согласно Spark docs.

+0

Я, очевидно, не зациклился на этой проблеме больше, но все же, замечательно знать, что есть некоторые полезные библиотеки для такого рода вещей. Спасибо за совет :) – Gideon

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