Одним из способов является использование стека ELK.
Приложение Spark может передать jmx в Logstash, который может объединять данные, и отправлять данные в ElasticSearch для индексации.
Kibana может отображать данные из ElasticSearch с возможностями визуализации.
1) Вам нужно либо включить зависимость build-sql-kafka в build.sbt, (на данный момент я использую Spark 2.2.0 с spark-sql-kafka 0.10)
// https://mvnrepository.com/artifact/org.apache.spark/spark-sql-kafka-0-10
libraryDependencies += "org.apache.spark" %% "spark-sql-kafka-0-10" % "2.2.0"
или включает --packages при выполнении spark-submit,
spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.2.0
2) Для того, чтобы приложение spark выдавало jmx,все строки, относящиеся к jmx, необходимо раскомментировать в файле metrics.properties,
и, во время spark-submit, указать каталог файла, как показано ниже,
--files=metrics.properties --conf spark.metrics.conf=metrics.properties
3) УстановитьElasticSearch, Logstash, Kibana.
Если вы находитесь в Window, способ запуска стека ELK, как показано ниже,
C:\elasticsearch> .\bin\elasticsearch.bat
C:\logstash> bin\logstash.bat -f .\jmx.conf
C:\kibana> .\bin\kibana.bat
В jmx.conf, пути jmx и частоте опроса необходимобыть настроенным.
input {
jmx {
path => "C:/logstash/config/jmx/"
polling_frequency => 15
type => "jmx"
nb_thread => 2
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
}
}
В папке пути jmx должен быть создан файл json, чтобы перечислить имена_объектов и атрибуты, которые вы хотите получить Logstash.(Logstash будет читать этот json-файл на основе polling_frequency, поэтому при любом последующем обновлении этого json-файла при запуске приложений Spark Logstash подхватит, что означает, что нет необходимости перезапускать Logstash)
Вы можете перечислитьдоступные имена объектов и атрибуты из jconsole после отправки приложений Spark,
Пример файла выглядит следующим образом:
{
"host" : "localhost",
"port" : 9000,
"alias" : "spark.jmx.sample1",
"queries" : [
{
"object_name" : "kafka.consumer:type=consumer-metrics,client-id=*",
"attributes" : ["incoming-byte-rate","outgoing-byte-rate"],
"object_alias" : "byteRate"
},
{
"object_name" : "metrics:name=local-1528139073457.driver.spark.streaming.e6c4b9da-a7d1-479f-b28f-ba2b9b1397d0.inputRate-total",
"attrivutes" : ["Value"],
"object_alias" : "somethingTeste1"
}
]}
4) Наконец, вы получите доступ к Kibana через http://localhost:5601
И, сначала настройте шаблон индекса.(Вы должны увидеть дату индекса данных)
Затем перейдите на страницу визуализации, чтобы создать метрики с именами объектов и атрибутами, которые вы перечислите из файла jmx json.