我正在尝试使用具有以下选项的 javaagent 为 spark 驱动程序和执行程序抓取指标。我在 kubernetes 集群中有 Prometheus,我在 kubernetes 集群外运行这个 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 作业之类的东西,它更有意义,因为它们并非一直运行。为此,您有一些选择:
- 来自 Banzai Cloud 的 Spark Prometheus Sink,如他们的 blog post 中所述
- 按照 Spark documentation 中的说明设置 GraphiteSink , 并将其指向 https://github.com/prometheus/graphite_exporter ,然后从该导出器中抓取指标
初始答案:
您不能让 2 个进程监听同一个端口,因此只需将 Prometheus 从不同的作业绑定(bind)到不同的端口即可。端口是 jmx_prometheus_javaagent-0.3.1.jar=
之后和 :
字符之前的数字 - 在您的例子中是 53700
。因此,您可以将一个端口用于一项任务,将另一个端口(可能是 53701
)用于第二项任务...
关于apache-spark - 为在同一台机器上运行的多个执行程序导出 spark 执行程序 jmx 指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62875302/