производительность структурированных потоковых метрик? - PullRequest
0 голосов
/ 18 мая 2018

Попробовав некоторые методы для мониторинга производительности структурированной потоковой передачи, показателей ввода / вывода, я вижу, что надежным способом является подключение streamingQueryListener к выходному потоку streamingQueryProgress для получения номера ввода / вывода.

Помимо SparkUI,

Есть ли лучший способ отслеживать производительность структурированной потоковой передачи?

Какой лучший способ вывести queryProgress в файл или Kafka?

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

1 Ответ

0 голосов
/ 05 июня 2018

Одним из способов является использование стека 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.

...