使用JvisualVM监控Spark Executor JVM(支持跳板机、直连两种方式)

刘超 22天前 ⋅ 215 阅读   编辑

一、概述

  Mac环境下JvisulaVM一般放在${JAVA_HOME}/bin/JvisualVM中(JAVA_HOME位置可以通过/usr/libexec/java_home -V获得),JvisulaVM支持(本地和远程)jstatd和JMX两种方式连接远程JVM。

  a、jstatd (Java Virtual Machine jstat Daemon)用于监听远程服务器的CPU,内存,线程等信息
  b、JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

  备注:针对jstatd我尝试未成功,因此也不在这里误导别人

二、JMX方式

  JMX配置如下:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=
-Dcom.sun.management.jmxremote.port=

  spark有如下三种声明配置方式:
  a、在spark-defaults.conf指定
  b、在spark-env.sh指定:配置master,worker的JavaOptions
  c、在spark-submit提交时指定

  1、那咱们开始配置JMX,这里采用spark-submit提交时配置,如下

/usr/bin/spark-submit --master yarn --deploy-mode client  --class com.opera.adx.job.Stat --files /nfs2/tag/source/osp-bu-mobile_user_segmentation/device_info/all_devices.csv,./logging.properties --conf "spark.executor.extraJavaOptions=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=0 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.util.logging.config.file=logging.properties"  --executor-cores 1  --num-executors 5 --executor-memory 8G --driver-memory 8G   --jars $jars  ./adx_stat_2.11-0.2-SNAPSHOT.jar adx_request 20200816 week official --job_names "statRequestFiled"

  注意:
  a、不能指定具体的 ip、port,因为spark中运行时,很可能一个节点上分配多个container进程,此时占用同一个端口,会导致spark应用程序通过spark-submit提交失败,在任务提交阶段会自动分配端口。
  b、日志文件地址logging.properties (210 b)

  2、查找JMX地址
  通过yarn logs -applicationId application_1582757194275_430694 | grep Connector查找spark executor JMS地址,如下

sdev@n-adx-hadoop-client-3:~/liujichao$ yarn logs -applicationId application_1582757194275_430694 | grep Connector
20/09/04 05:57:32 INFO impl.TimelineClientImpl: Timeline service address: http://n17-07-04:8188/ws/v1/timeline/
20/09/04 05:57:32 INFO client.RMProxy: Connecting to ResourceManager at n17-07-04/******:8050
20/09/04 05:57:32 INFO client.AHSProxy: Connecting to Application History server at n17-07-04/******:10200
Sep 04, 2020 6:35:16 AM ConnectorBootstrap startRemoteConnectorServer
CONFIG: JMX Connector ready at: service:jmx:rmi:///jndi/rmi://n44-02:37258/jmxrmi
Sep 04, 2020 6:35:13 AM ConnectorBootstrap startRemoteConnectorServer
CONFIG: JMX Connector ready at: service:jmx:rmi:///jndi/rmi://n44-12:38600/jmxrmi
。。。。。。

  3、我们只能通过跳板机访问集群,所以在Mac本地直接通过jvisualvm肯定不能连上,这里封装个ssh脚本,执行./jvisualvm-proxy.sh,如下

 

  4、配置/etc/hosts文件,把集群中所有机器的ip与host添加该文件中,如果不添加,可能会报jvisualvm 无法解析主机

  5、右击n05-16,选择“添加JMX连接”,如下

 

  6、在连接处,输入service:jmx:rmi:///jndi/rmi://n44-02:37258/jmxrmi(这个地址是第二步查找到的),如下

 

  7、连接效果如下