1

我正在尝试使用 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_class.

然而,这似乎不是调用 CoarseGrainedScheduler 的地方。但是,查看此文档,这就是它被调用的地方:

$ ./bin/spark-class org.apache.spark.executor.CoarseGrainedExecutorBackend <opts>

那么,为什么我的启动字符串没有被拾起?根据通过 spark-class 调用 CoarseGrainedExecutorBackend 的假设/指令,我实际上编辑了该文件以在运行任何 java 命令时添加我的启动字符串,并且也无法将我的启动字符串添加到 CoarseGrainedExecutorBackend,尽管它确实将它添加到Spark Worker 进程本身。再一次,似乎 CoarseGrainedExecutorBackend 不是通过 spark-class 启动的,即使链接的文档说它是。

谁能帮我找到 CoarseGrainedExecutorBackend 进程的根源以及它是如何调用的?如果我可以提供任何其他详细信息,请告诉我。

4

0 回答 0