Spark Metrics

Spark Metric/restapi

服務(wù)運行時將服務(wù)信息展示出來方便用戶查看時服務(wù)易用性的重要組成部分。特別時對于分布式集群服務(wù)。

spark服務(wù)本身有提供獲取應(yīng)用信息對方法,方便用戶查看應(yīng)用信息。Spark服務(wù)提供對master,worker,driver,executor,Historyserver進(jìn)程對運行展示。對于應(yīng)用(driver/executor)進(jìn)程,主要提供metric和restapi對訪問方式以展示運行狀態(tài)。

Metric信息:

服務(wù)/進(jìn)程通過Metric將自身運行信息展示出來。spark基于Coda Hale Metrics Library庫展示。需要展示的信息通過配置source類,在運行時通過反射實例化并啟動source進(jìn)行收集。然后通過配置sink類,將信息sink到對應(yīng)的平臺。

Metrics的source和sink模塊啟動流程

以driver為例:driver進(jìn)程啟動metricSystem的流程:

初始化:

SparkContext在初始化時調(diào)用 : MetricsSystem.createMetricsSystem("driver", conf, securityManager)

然后等待ui啟動后啟動并綁定webui(executor則是初始化后直接啟動)

metricsSystem.start()

metricsSystem.getServletHandlers.foreach(handler => ui.foreach(_.attachHandler(handler)))

進(jìn)一步查看MetricSystem創(chuàng)建過程:

創(chuàng)建MetricConfig, val metricsConfig = new MetricsConfig(conf)

初始化MetricConfig,首先設(shè)置默認(rèn)的屬性信息:

prop.setProperty("*.sink.servlet.class","org.apache.spark.metrics.sink.MetricsServlet")

prop.setProperty("*.sink.servlet.path","/metrics/json")

prop.setProperty("master.sink.servlet.path","/metrics/master/json")

prop.setProperty("applications.sink.servlet.path","/metrics/applications/json")

加載conf/metric.properties文件或者通過spark.metrics.conf制定的文件。讀取相關(guān)配置,metricsConfig.initialize()

在啟動metricSystem時,則會注冊并啟動source和sink

registerSources()

registerSinks()

sinks.foreach(_.start)

默認(rèn)啟動對source如下:

Source 服務(wù)/進(jìn)程 收集信息
MasterSource Master進(jìn)程Standalone模式生效 workers,aliveWorkers,apps,waitingApps
ApplicationSource Master進(jìn)程Standalone模式生效 application,status,runtime_ms,cores
WorkerSource Worker進(jìn)程,Standalone模式生效 executors,coresUsed,memUsed_MB,coresFree,memFree_MB
StreamingSource Streaming應(yīng)用,driver進(jìn)程 receivers,lastReceivedBatch_records...
DAGSchedulerSource driver進(jìn)程 failedStages,runningStages,waitingStages,allJobs...
CodegenMetrics sql應(yīng)用,driver進(jìn)程 sourceCodeSize,compilationTime,generatedClassSize,generatedMethodSize
MesosClusterSchedulerSource mesos調(diào)度模式下,drvier啟用 WatingDrivers,LaunchedDrivers,retryDrivers
CacheMetrics jobhistory進(jìn)程 ookup.count.
ExecutorAllocationManagerSource driver進(jìn)程,executor動態(tài)調(diào)度使用 numberExecutorsToAdd,numberMaxNeededExecutors,numberTargetExecutors..
ExecutorSource executor進(jìn)程 read_bytes,write_bytes,largeRead_ops,write_ops,read_ops,activeTasks...

可配置的source如下:

Source 服務(wù)/進(jìn)程 收集信息
JvmSource driver,executor,master,worker 收集jvm運行信息

配置方法:修改$SPARK_HOME/conf目錄下的metrics.properties文件:

默認(rèn)相關(guān)source已經(jīng)統(tǒng)計在列。可添加source為jvmsource。添加之后則相關(guān)進(jìn)程的jvm信息會被收集。配置方法

添加如下行:

driver.source.jvm.class=org.apache.spark.metrics.source.JvmSource

executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource

或者*.source.jvm.class=org.apache.spark.metrics.source.JvmSource

source信息的獲取比較簡單,以DAGSchedulerSource的runningStages為例,直接計算dagscheduler的runningStages大小即可。override def getValue: Int = dagScheduler.runningStages.size

通過這些收集的信息可以看到,主要是方便查看運行狀態(tài),并非提供用來監(jiān)控和管理應(yīng)用
Metric信息展示方法:
收集的目的是方便展示,展示的方法是sink。

常用的sink如下:

a) metricserverlet

spark默認(rèn)的sink為metricsserverlet,通過driver服務(wù)啟動的webui綁定,然后展示出來。ip:4040/metrics/json(ip位driver節(jié)點的ip)展示:由于executor服務(wù)沒有相關(guān)ui,無法展示metricsource的信息。 下圖是配置過JVMsource后,通過driver節(jié)點的看到的metric信息。


屏幕快照 2017-12-21 下午1.28.47.png

b) CSV方式(將進(jìn)程的source信息,寫入到csv文件,各進(jìn)程打印至進(jìn)程節(jié)點的相關(guān)目錄下,每分鐘打印一次):

*.sink.csv.class=org.apache.spark.metrics.sink.CsvSink

*.sink.csv.period=1

*.sink.csv.directory=/tmp/

c) console方式(將進(jìn)程的source信息寫入到console/stdout

,輸出到進(jìn)程的stdout):

*.sink.console.class=org.apache.spark.metrics.sink.ConsoleSink

*.sink.console.period=20

*.sink.console.unit=seconds

d) slf4j方式(直接在運行日志中查看):

*.sink.slf4j.class=org.apache.spark.metrics.sink.Slf4jSink

*.sink.slf4j.period=10

*.sink.slf4j.unit=seconds

e) JMX方式(此情況下,相關(guān)端口要經(jīng)過規(guī)劃,不同的pap使用不同的端口,對于一個app來說,只能在一個節(jié)點啟動一個executor,否則會有端口沖突):

executor.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink

JMX方式在配置后,需要在driver/executor啟動jmx服務(wù)。 可通過啟動應(yīng)用時添加如下操作實現(xiàn)--conf "spark.driver.extraJavaOptions=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8090 -Dcom.sun.management.jmxremote.rmi.port=8001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false --conf "spark.executor.extraJavaOptions=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8002 -Dcom.sun.management.jmxremote.rmi.port=8003 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

可通過jconsole工具鏈接至對應(yīng)driver進(jìn)程所在ip和端口查看jmx信息。

屏幕快照 2017-12-21 下午1.36.25.png

restApi信息

通過RestApi可查看信息如下:

除例metrics之外,用戶還可以通過restApi接口查看應(yīng)用運行信息??梢圆樵兊男畔⑷缦拢▍⒁?http://spark.apache.org/docs/latest/monitoring.html):

url 描述
/applications A list of all applications
/applications/[app-id]/jobs A list of all jobs for a given application
/applications/[app-id]/jobs/[job-id] Details for the given job
/applications/[app-id]/stages A list of all stages for a given application
/applications/[app-id]/stages/[stage-id] A list of all attempts for the given stage
/applications/[app-id]/stages/[stage-id]/[stage-attempt-id] Details for the given stage attempt
/applications/[app-id]/stages/[stage-id]/[stage-attempt-id]/taskSummary Summary metrics of all tasks in the given stage attempt
/applications/[app-id]/stages/[stage-id]/[stage-attempt-id]/taskList A list of all tasks for the given stage attempt
/applications/[app-id]/executors A list of all executors for the given application
/applications/[app-id]/storage/rdd A list of stored RDDs for the given application
/applications/[app-id]/storage/rdd/[rdd-id] Details for the storage status of a given RDD
/applications/[app-id]/logs dDownload the event logs for all attempts of the given application as a zip file
/applications/[app-id]/[attempt-id]/logs Download the event logs for the specified attempt of the given application as a zip file

通過RestApi查看信息方法:

運行中的應(yīng)用:通過driver進(jìn)程查看:
ip:port/api/v1/....

其中Ip為driver所在節(jié)點ip,端口為4040. 如果一個節(jié)點運行多個driver,端口會以此累加至4040,4041,4042 . 如:10.1.236.65:4041/api/v1/applications/application_1512542119073_0229/storage/rdd/23(on yarn 模式會自動跳轉(zhuǎn)至如下頁面)


屏幕快照 2017-12-21 上午11.21.08.png

對于運行完的應(yīng)用,可通過jobhistory服務(wù)查看
此場景下,需要提交應(yīng)用時打開eventlog記錄功能
打開方法在應(yīng)用的spark-defaults.conf中添加如下配置spark.eventLog.enabled為true,spark.eventLog.dir為hdfs:///spark-history 。
其中/spark-history可配置,需要和jobhistory進(jìn)程的路徑配置一致 ,該路徑可通過historyserver頁面查看。
ip:port/api/v1/....(其中Ip為spark服務(wù)的jobhistory進(jìn)程所在節(jié)點ip,默認(rèn)端口為18080). 可通過如下方式訪問:


屏幕快照 2017-12-21 上午11.32.06.png

總結(jié):

Spark作為計算引擎,對于大數(shù)據(jù)集群來說,作為客戶端向Yarn提交應(yīng)用來完成數(shù)據(jù)的分析。所使用的資源一般在yarn控制之下。其應(yīng)用場景并非作為服務(wù)端為其他組件提供服務(wù)。其所提供的信息通常是針對app級別,如job,stage,task等信息。一般的信息監(jiān)控需求均可通過其ui頁面查看。對于一些應(yīng)用的運行情況,可通過restapi獲取和分析。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容