我正在尝试在Kubernetes上使用spark。我的想法是在运行prometheus operator的k8s集群上使用spark-submit。现在我知道prometheus operator可以响应ServiceMonitor yaml,但是我对如何使用spark-submit提供YAML中所需的一些东西感到困惑
这是YAML
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: sparkloads-metrics
namespace: runspark
spec:
selector:
matchLabels:
app: runspark
namespaceSelector:
matchNames:
- runspark
endpoints:
- port: 8192 ---> How to provide the name to port using `spark-submit`
interval: 30s
scheme: http发布于 2020-01-22 18:12:28
您还不能为SparkSubmit (Spark v2.4.4)创建的服务提供其他端口及其名称。在以后的版本中,情况可能会发生变化。
你可以做的是创建额外的Kubernetes Service (火花监测服务,例如。在使用SparkSubmit提交作业之后(例如,运行spark-submit ... && kubectl apply ... ),每个Spark作业的类型为群集IP。或者将任何可用的Kubernetes客户端与您选择的语言一起使用。
请注意,您可以使用Kubernetes OwnerReference在删除Service时配置自动删除Spark Driver Pod /GC。
然后您可以通过普罗米修斯操作员头盔提供ServiceMonitor的值:
prometheus:
additionalServiceMonitors:
- name: spark-metrics # <- Spark Monitoring Service name
selector:
matchLabels:
k8s-app: spark-metrics # <- Spark Monitoring Service label
namespaceSelector:
any: true
endpoints:
- interval: 10s
port: metrics # <- Spark Monitoring Service port name请注意,Spark还没有提供自定义Spark Pod的方法,所以应该公开指标的Pod端口不会在Pod级别公开,也不会通过Spark访问。为了克服这个问题,您可以在Dockerfile中添加额外的EXPOSE ... 8088语句并重新构建Spark镜像。
本指南将帮助您使用例如Jmx Exporter的PULL策略设置Spark监控。
还有一种替代方法(虽然建议仅用于短时间运行的Spark作业,但如果您不运行大量工作负载,则可以在您的环境中尝试):
Prometheus Operator
部署
集成
通过这样做,你的Spark Pods将把指标推送到网关,而普罗米修斯将按顺序从网关中拉出它们。
您可以参考组合了Prometheus Operator和Prometheus Pushgateway的Spark Monitoring Helm chart示例。
希望能有所帮助。
https://stackoverflow.com/questions/59850935
复制相似问题