Apache spark 导出在同一台计算机上运行的多个执行器的spark executor jmx度量
我正在尝试使用javaagent和以下选项来获取spark驱动程序和执行器的指标。我在kubernetes集群中有Prometheus,我正在kubernetes集群之外运行这个spark应用程序Apache spark 导出在同一台计算机上运行的多个执行器的spark executor jmx度量,apache-spark,kubernetes,prometheus,metrics,jmx-exporter,Apache Spark,Kubernetes,Prometheus,Metrics,Jmx Exporter,我正在尝试使用javaagent和以下选项来获取spark驱动程序和执行器的指标。我在kubernetes集群中有Prometheus,我正在kubernetes集群之外运行这个spark应用程序 spark.executor.extraJavaOptions=-javaagent:/opt/clkd/prometheus/jmx_prometheus_javaagent-0.3.1.jar=53700:executor_pattern.yaml 但由于两个执行器都在同一台机器上运行,所以我得
spark.executor.extraJavaOptions=-javaagent:/opt/clkd/prometheus/jmx_prometheus_javaagent-0.3.1.jar=53700:executor_pattern.yaml
但由于两个执行器都在同一台机器上运行,所以我得到了以下异常
Caused by: java.net.BindException: Address already in use ....
我看到很多人都提出了同样的问题,但我找不到答案。请告诉我如何解决此问题。我认为您需要从基于拉的监控切换到基于推的监控。对于像Spark jobs这样的公司来说,这更有意义,因为它们并非一直在运行。为此,您有一些选择:
- 星火普罗米修斯从万载云中沉入,正如他们的照片所描绘的那样
- 按照中所述设置GraphiteSink,并将其指向,然后从导出器中刮取度量值
初步答复:
您不能让两个进程监听同一端口,所以只需将来自不同作业的Prometheus绑定到不同端口即可。端口是
jmx\u prometheus\u javaagent-0.3.1.jar=
后面的数字,在:
字符之前-在您的例子中是53700
。因此,您可以将一个端口用于一个任务,将另一个端口(可能53701
)用于第二个任务…,但我无法配置特定于每个spark执行器的JVM选项。spark.executor.extraJavaOptions是所有spark executor的单个参数。抱歉,您是对的。。。不知怎的,我以为是给司机的:-)我改变了答案