我正在尝试使用以下选项的javaagent为spark驱动程序和执行程序收集指标。我在kubernetes集群中有Prometheus,并且我正在kubernete集群之外运行这个spark应用程序。
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作业这样的事情来说,这更有意义,因为它们并不是一直在运行。为此,您有一些替代方案:
- 星火普罗米修斯从半载云中沉没,如他们博客文章中所述
- 按照Spark文档中的说明设置GraphiteSink,并将其指向https://github.com/prometheus/graphite_exporter,然后从该出口商那里刮取指标
初始答案:
您不能让两个进程在同一个端口上侦听,所以只需将普罗米修斯从不同的作业绑定到不同的端口即可。Port是在jmx_prometheus_javaagent-0.3.1.jar=
之后、:
字符之前的数字——在您的情况下,它是53700
。因此,您可以将一个端口用于一个任务,将另一个端口(可能是53701
(用于第二个任务。。。