spark作业中Java堆的利用
我正在通过Java运行Spark流媒体作业。我在AWS上有一个带有cloudera分布的4节点集群,其中3个是计算节点。当我的作业运行时,我需要记录集群的每个执行器/节点上使用了多少java堆。我使用的是getRunTime()方法,但我得到的值相信是来自驱动程序执行spark作业中Java堆的利用,java,apache-spark,bigdata,Java,Apache Spark,Bigdata,我正在通过Java运行Spark流媒体作业。我在AWS上有一个带有cloudera分布的4节点集群,其中3个是计算节点。当我的作业运行时,我需要记录集群的每个执行器/节点上使用了多少java堆。我使用的是getRunTime()方法,但我得到的值相信是来自驱动程序执行 是否有一种方法可以用来捕获单个堆的利用率 Spark通过公开这些指标。其中一种是JMX计数器,但您可以选择其他格式(CSV、Console、Graphite、Ganglia、Slf4j)。这要求您在工作节点上添加一个metrics
是否有一种方法可以用来捕获单个堆的利用率 Spark通过公开这些指标。其中一种是JMX计数器,但您可以选择其他格式(CSV、Console、Graphite、Ganglia、Slf4j)。这要求您在工作节点上添加一个
metrics.properties
文件。以下是JMX计数器的示例:
*.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink
master.source.jvm.class=org.apache.spark.metrics.source.JvmSource
worker.source.jvm.class=org.apache.spark.metrics.source.JvmSource
driver.source.jvm.class=org.apache.spark.metrics.source.JvmSource
executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource
然后,它公开了许多指标,其中一些是:
{SparkAppId}.{ExecutorId}.jvm.heap.committed
{SparkAppId}.{ExecutorId}.jvm.heap.init
{SparkAppId}.{ExecutorId}.jvm.heap.max
{SparkAppId}.{ExecutorId}.jvm.heap.usage
{SparkAppId}.{ExecutorId}.jvm.heap.used
{SparkAppId}.{ExecutorId}.jvm.non-heap.committed
{SparkAppId}.{ExecutorId}.jvm.non-heap.init
{SparkAppId}.{ExecutorId}.jvm.non-heap.max
{SparkAppId}.{ExecutorId}.jvm.non-heap.usage
{SparkAppId}.{ExecutorId}.jvm.non-heap.used
这样,您就可以监视应用程序堆的使用情况