【问题标题】:Java heap utilization in spark jobSpark 作业中的 Java 堆利用率
【发布时间】:2016-09-14 13:25:44
【问题描述】:

我正在通过 Java 运行 Spark Streaming 作业。我在 AWS 上有一个带有 cloudera 分布的 4 节点集群,其中 3 个是计算节点。当我的作业运行时,我需要记录集群的每个执行程序/节点上使用了多少 Java 堆。我正在使用 getRunTime() 方法,但我得到了一个我认为来自驱动程序执行的值。

有没有一种方法可以用来捕获单个堆的利用率?

【问题讨论】:

    标签: java apache-spark bigdata


    【解决方案1】:

    Spark 通过Sinks 公开此类指标。其中一个是 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
    

    这样您就可以监控您的应用程序堆使用情况。

    【讨论】:

      猜你喜欢
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多