我试图使用APM(应用程序性能管理系统)来测试Spark(v 1.6.1)应用程序。要使用选择的APM执行此操作,我必须使用-javaagent
标记来检测JVM启动字符串,指向我的APM以及任何相关的APM选项(例如,unique-host-id
)。
在Spark Master服务器上,我已成功完成此操作,并且在各种Spark Worker服务器上,我也成功地检测了spark worker进程。
但是,当我查看正在运行的Java进程时,我看到一个不包含我的启动字符串的其他进程:CoarseGrainedScheduler。 CoarseGrainedScheduler是实际的Spark执行器,它运行由Master提交给Worker的worker应用程序代码。
我无法确定调用CoarseGrainedScheduler的位置。
所以,对于更多上下文,这里是我如何检测Spark Worker启动字符串:在{SPARK_HOME}/conf/spark_env.sh
中,我添加了以下环境变量:
SPARK_DAEMON_JAVA_OPTS="<java-agent-startup-string>"
这将最终调用{SPARK_HOME}/bin/spark-class
,这是所有Spark调用的根;也就是说,{SPARK_HOME}/bin
或{SPARK_HOME}/sbin
发出的所有spark命令最终都会委托给spark_class
。
然而,这似乎不是从CoarseGrainedScheduler调用的地方。但是,查看this document,是从哪里调用:
$ ./bin/spark-class org.apache.spark.executor.CoarseGrainedExecutorBackend <opts>
那么,为什么我的启动字符串没有被接收?根据通过spark-class调用CoarseGrainedExecutorBackend的假设/指令,我实际上编辑了该文件以在运行任何java命令时添加我的启动字符串,并且还无法将我的启动字符串添加到CoarseGrainedExecutorBackend,尽管它确实将其添加到Spark Worker进程本身。再说一遍,似乎CoarseGrainedExecutorBackend不是通过spark-class启动的,即使链接文档说它是。
任何人都可以帮我找到CoarseGrainedExecutorBackend进程的根目录以及它是如何被调用的吗?如果我可以提供任何其他详细信息,请告诉我。