監控配置
spark的監控主要分為Master、Worker、driver、executor監控。Master和Worker的監控在spark集群運行時即可監控,Driver和Excutor的監控需要針對某一個app來進行監控。
如果都要監控,需要根據以下步驟來配置
- 修改$SPARK_HOME/conf/spark-env.sh,添加以下語句:
SPARK_DAEMON_JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
# JMX port to use
export SPARK_DAEMON_JAVA_OPTS="$SPARK_DAEMON_JAVA_OPTS -Dcom.sun.management.jmxremote.port=8712 "
# export SPARK_DAEMON_JAVA_OPTS="$SPARK_DAEMON_JAVA_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
語句中有$JMX_PORT,這個的值可以自定義,也可以獲取一個隨機數作為端口號。
如果端口自定義為一個具體的值,而 spark 的 Master 和其中之一的 Worker 在同一台機器上,會出現端口沖突的情況。
-
vim $SPARK_HOME/conf/metrics.properties
*.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink master.source.jvm.class=org.apache.spark.metrics.source.JvmSource worker.source.jvm.class=org.apache.spark.metrics.source.JvmSource driver.source.jvm.class=org.apache.spark.metrics.source.JvmSource executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource
-
vim $SPARK_HOME/conf/spark-defaults.conf,添加以下項為driver和executor設置監控端口,在有程序運行的情況下,此端口會被打開。
spark.metrics.conf /opt/bigdata/spark/conf/metrics.properties
spark.driver.extraJavaOptions -XX:+PrintGCDetails -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.mana
gement.jmxremote.port=8712
spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.mana
gement.jmxremote.port=8711
在spark的Master和Worker正常運行以及spark-submit提交了一個程序的情況下,可以從linux中查詢出端口號碼。
20181105-新配置方法
組件的運行步驟
sbin/start-all.sh
1 sbin/spark-config.sh
2 bin/load-spark-env.sh
3 sbin/start-master.sh
1) sbin/spark-config.sh
2) bin/load-spark-env.sh
3) sbin/spark-damon.sh
1 > sbin/spark-config.sh
2 > bin/load-spark-env.sh
3 > ...正式啟動
4 sbin/start-slaves.sh
1) sbin/spark-config.sh
2) bin/load-spark-env.sh
3) sbin/start-slave.sh
1 > sbin/spark-config.sh
2 > bin/load-spark-env.sh
3 > sbin/spark-damon.sh
1 - sbin/spark-config.sh
2 - bin/load-spark-env.sh
3 - ...正式啟動
配置步驟
在組件的運行步驟中大量加載 sbin/spark-config.sh 和 bin/load-spark-env.sh 兩個腳本,load-spark-env.sh 中主要加載saprk的外部運行環境配置,spark-config.sh 主要加載spark運行的內部環境配置,因此,將需要修改的腳本修改在 spark-config.sh 中,修改步驟如下
1. 修改 spark-config.sh ,添加腳本
if [ "${JMX_PORT}" ]; then
export SPARK_DAEMON_JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=${JMX_PORT}"
fi
2. 修改 start-master.sh ,添加腳本
export JMX_PORT=xxxx
3. 修改 start-slave.sh ,添加腳本
export JMX_PORT=xxxx
測試結果:已在測試集群驗證成功
20181107-新配置方法
配置步驟
修改 $SPARK_HOME/sbin/start-master.sh 以及 start-slave.sh (所有機器)
export SPARK_DAEMON_JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port
=xxxx"
指標項整理
OS監控指標
此指標項適用於Master、Worker所在機器的監控。
objectName | 指標項 | 說明 |
---|---|---|
java.lang:type=OperatingSystem | SystemCpuLoad | 系統CPU使用率 |
java.lang:type=OperatingSystem | ProcessCpuLoad | 進程CPU使用率 |
java.lang:type=OperatingSystem | FreePhysicalMemorySize | 空閑物理內存 |
JVM監控指標
此指標項適用於Master、Worker、app的Driver和Executor的監控。
objectName | 指標項 | 說明 |
---|---|---|
metrics:name=jvm.total.used | Value | JVM的內存使用大小 |
metrics:name=jvm.PS-Scavenge.count | Value | GC次數 |
Master監控指標
objectName | 指標項 | 說明 |
---|---|---|
metrics:name=master.aliveWorkers | Value | 可使用的Woker數量 |
metrics:name=master.apps | Value | spark的app數量 |
metrics:name=master.waitingApps | Value | 等待的app數量 |
Worker監控指標
objectName | 指標項 | 說明 |
---|---|---|
metrics:name=worker.memFree_MB | Value | worker的空閑內存 |
metrics:name=worker.coresFree | Value | worker空閑的core數量 |
metrics:name=worker.executors | Value | worker的正在使用的executor的數量 |
metrics:name=worker.memUsed_MB | Value | worker的已使用的內存 |
metrics:name=worker.coresUsed | Value | worker的已使用的core的數量 |
Driver和Executor的監控
從Driver和Executor的端口中,根據app的ID獲取到與這個app的所有指標,如下圖所示:
類型 | objectName | 指標項 | 說明 |
---|---|---|---|
Driver | <app-ID>.driver.XXX | Value | app-ID的spark程序的driver情況 |
Excutor | <app-ID>.0.XXX | Value | app-ID的spark程序的executorID為0的情況 |
ps: XXX 的具體名稱與以上 非Master和Worker 的指標項名稱一致。