【问题标题】:How to get memory usage and Cpu utilization from cluster如何从集群中获取内存使用情况和 Cpu 使用情况
【发布时间】:2019-09-27 12:30:40
【问题描述】:
我们正在使用 AWS EMR 来运行 spark 作业。从神经节我们看到,与分配的内存相比,我们集群的内存利用率较低。 cpu 利用率也是如此。
我们目前通过实现 Spark 侦听器来报告 Spark 指标。但我找不到如何从 spark 代码中获取神经节指标。这些信息在 spark 事件中的任何地方都可用吗?
【问题讨论】:
标签:
apache-spark
amazon-emr
ganglia
【解决方案1】:
您可以尝试 sparklens (https://github.com/qubole/sparklens) 来首先为您的 spark 应用程序找出正确的执行程序数量,然后相应地配置集群。集群利用率还取决于应用程序的可扩展性特征。
获取 spark JMX 指标
1) 在 spark/conf/ 中创建 metrics.properties 文件
*.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink driver.source.jvm.class=org.apache.spark.metrics.source.JvmSource
executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource
master.source.jvm.class=org.apache.spark.metrics.source.JvmSource
worker.source.jvm.class=org.apache.spark.metrics.source.JvmSource
2) 将 jolokai 代理 jar 下载到集群中的某个位置。其他 JMX 代理也应该可以工作。
3) 更新以下 Spark 覆盖:
spark.metrics.conf spark/conf/metrics.properties
spark.driver.extraJavaOptions -Djava.net.preferIPv4Stack=true
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8090 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -javaagent:/tmp/ jolokia-jvm.jar=port=8779,host=localhost spark.executor.extraJavaOptions -Djava.net.preferIPv4Stack=true
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8091 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -javaagent:/tmp/ jolokia-jvm.jar=port=8781,host=localhost"
4) 使用电报或其他监控工具从代理获取指标。