改版通知

巨人肩膀网站已全新改版。若您仍依赖旧站功能或数据,欢迎联系我们,我们会协助处理。联系我们

Spark监控优化与性能提升策略

ckckck2025年1月10日8 浏览

指标

概述

Spark 的指标被解耦到对应于 Spark 组件的不同实例中。在每个实例中,您可以配置一组向其报告指标的接收器。目前支持以下实例:

Spark 组件实例
  • master:Spark 独立主进程。
    • applications:master 中的一个组件,负责报告各种应用程序。
    • worker:一个 Spark 独立工作进程。
    • executor:一个 Spark 执行器。
    • driver:Spark 驱动程序进程(创建 SparkContext 的进程)。
    • shuffleService:Spark 随机播放服务。
    • applicationMaster:在 YARN 上运行时的 Spark ApplicationMaster。
    • mesos_cluster:在 Mesos 上运行时的 Spark 集群调度器。

每个实例都可以向零个或多个接收器报告。接收器包含在 org.apache.spark.metrics.sink 包中:

  • ConsoleSink:将指标信息记录到控制台。
  • CSVSink:定期将指标数据导出到 CSV 文件。
  • JmxSink:注册指标以在 JMX 控制台中查看。
  • MetricsServlet:在现有的 Spark UI 中添加一个 servlet,以将指标数据作为 JSON 数据提供。
  • PrometheusServlet:(实验性)在现有的 Spark UI 中添加一个 servlet,以提供 Prometheus 格式的指标数据。
  • GraphiteSink:将指标发送到 Graphite 节点。
  • Slf4jSink:将指标作为日志条目发送到 slf4j。
  • StatsdSink:将指标发送到 StatsD 节点。

任务配置

方式1:使用 Docker 镜像中的配置文件

yaml 复制代码
monitoring:
  exposeDriverMetrics: true
  exposeExecutorMetrics: true
  prometheus:
    jmxExporterJar: "/opt/spark/jars/jmx_prometheus_javaagent-0.17.2.jar"
    port: 8090
    portName: http-metric
    configFile: "/opt/spark/metrics/conf/prometheus.yaml"
  lowercaseOutputName: true
  attrNameSnakeCase: true
  rules:
    - pattern: metrics<name=(S+).(S+).driver.(BlockManager|DAGScheduler|jvm).(S+)><>Value
      name: spark_driver_$3_$4
      type: GAUGE
      labels:
        app_namespace: "$1"
        app_id: "$2"
    - pattern: metrics<name=(S+).(S+).driver.(BlockManager|DAGScheduler|jvm).(S+).(S+)><>Value
      name: spark_driver_$3_$4_$5
      type: GAUGE
      labels:
        app_namespace: "$1"
        app_id: "$2"
    - pattern: metrics<name=(S+).(S+).driver.(S+).StreamingMetrics.streaming.(S+)><>Value
      name: spark_streaming_driver_$4
      type: GAUGE
      labels:
        app_namespace: "$1"
        app_id: "$2"
    - pattern: metrics<name=(S+).(S+).driver.spark.streaming.(S+).(S+)><>Value
      name: spark_structured_streaming_driver_$4
      type: GAUGE
      labels:
        app_namespace: "$1"
        app_id: "$2"
        query_name: "$3"
    - pattern: metrics<name=(S+).(S+).(S+).executor.(S+)><>Value
      name: spark_executor_$4
      type: GAUGE
      labels:
        app_namespace: "$1"
        app_id: "$2"
        executor_id: "$3"
    - pattern: metrics<name=(S+).(S+).driver.DAGScheduler.(.*)><>Count
      name: spark_driver_DAGScheduler_$3_count
      type: COUNTER
      labels:
        app_namespace: "$1"
        app_id: "$2"
    - pattern: metrics<name=(S+).(S+).driver.HiveExternalCatalog.(.*)><>Count
      name: spark_driver_HiveExternalCatalog_$3_count
      type: COUNTER
      labels:
        app_namespace: "$1"
        app_id: "$2"
    - pattern: metrics<name=(S+).(S+).driver.CodeGenerator.(.*)><>Count
      name: spark_driver_CodeGenerator_$3_count
      type: COUNTER
      labels:
        app_namespace: "$1"
        app_id: "$2"
    - pattern: metrics<name=(S+).(S+).driver.LiveListenerBus.(.*)><>Count
      name: spark_driver_LiveListenerBus_$3_count
      type: COUNTER
      labels:
        app_namespace: "$1"
        app_id: "$2"
    - pattern: metrics<name=(S+).(S+).driver.LiveListenerBus.(.*)><>Value
      name: spark_driver_LiveListenerBus_$3
      type: GAUGE
      labels:
        app_namespace: "$1"
        app_id: "$2"
    - pattern: metrics<name=(S+).(S+).(.*).executor.(.*)><>Count
      name: spark_executor_$4_count
      type: COUNTER
      labels:
        app_namespace: "$1"
        app_id: "$2"
        executor_id: "$3"
    - pattern: metrics<name=(S+).(S+).([0-9]+).executor.(.*)><>Value
      name: spark_executor_$4
      type: GAUGE
      labels:
        app_namespace: "$1"
        app_id: "$2"
        executor_id: "$3"
    - pattern: metrics<name=(S+).(S+).([0-9]+).(jvm|NettyBlockTransfer).(.*)><>Value
      name: spark_executor_$4_$5
      type: GAUGE
      labels:
        app_namespace: "$1"
        app_id: "$2"
        executor_id: "$3"
    - pattern: metrics<name=(S+).(S+).([0-9]+).HiveExternalCatalog.(.*)><>Count
      name: spark_executor_HiveExternalCatalog_$4_count
      type: COUNTER
      labels:
        app_namespace: "$1"
        app_id: "$2"
        executor_id: "$3"
    - pattern: metrics<name=(S+).(S+).([0-9]+).CodeGenerator.(.*)><>Count
      name: spark_executor_CodeGenerator_$4_count
      type: COUNTER
      labels:
        app_namespace: "$1"
        app_id: "$2"
        executor_id: "$3"

方式2:直接放在配置文件中

yaml 复制代码
monitoring:
  exposeDriverMetrics: true
  exposeExecutorMetrics: true
  metricsProperties: |
    *.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink
    # Enable JvmSource for instance master, worker, driver and executor
    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
  prometheus:
    jmxExporterJar: "/opt/spark/jars/jmx_prometheus_javaagent-0.17.2.jar"
    port: 8090
    configuration: |
      lowercaseOutputName: true
      attrNameSnakeCase: true
      rules:
        # These come from the application driver if it's a streaming application
        # Example: default/streaming.driver.com.example.ClassName.StreamingMetrics.streaming.lastCompletedBatch_schedulingDelay
        - pattern: metrics<name=(S+).(S+).driver.(S+).StreamingMetrics.streaming.(S+)><>Value
          name: spark_streaming_driver_$4
          labels:
            app_namespace: "$1"
            app_id: "$2"
        # These come from the application driver if it's a structured streaming application
        # Example: default/streaming.driver.spark.streaming.QueryName.inputRate-total
        - pattern: metrics<name=(S+).(S+).driver.spark.streaming.(S+).(S+)><>Value
          name: spark_structured_streaming_driver_$4
          labels:
            app_namespace: "$1"
            app_id: "$2"
            query_name: "$3"
        # These come from the application executors
        # Example: default/spark-pi.0.executor.threadpool.activeTasks
        - pattern: metrics<name=(S+).(S+).(S+).executor.(S+)><>Value
          name: spark_executor_$4
          type: GAUGE
          labels:
            app_namespace: "$1"
            app_id: "$2"
            executor_id: "$3"
        # These come from the application driver
        # Example: default/spark-pi.driver.DAGScheduler.stage.failedStages
        - pattern: metrics<name=(S+).(S+).driver.(BlockManager|DAGScheduler|jvm).(S+)><>Value
          name: spark_driver_$3_$4
          type: GAUGE
          labels:
            app_namespace: "$1"
            app_id: "$2"
        # [ADD]
        - pattern: metrics<name=(S+).(S+).driver.(BlockManager|DAGScheduler|jvm).(S+).(S+)><>Value
          name: spark_driver_$3_$4_$5
          type: GAUGE
          labels:
            app_namespace: "$1"
            app_id: "$2"
        # These come from the application driver
        # Emulate timers for DAGScheduler like messagePRocessingTime
        - pattern: metrics<name=(S+).(S+).driver.DAGScheduler.(.*)><>Count
          name: spark_driver_DAGScheduler_$3_count
          type: COUNTER
          labels:
            app_namespace: "$1"
            app_id: "$2"
        # HiveExternalCatalog is of type counter
        - pattern: metrics<name=(S+).(S+).driver.HiveExternalCatalog.(.*)><>Count
          name: spark_driver_HiveExternalCatalog_$3_count
          type: COUNTER
          labels:
            app_namespace: "$1"
            app_id: "$2"
        # These come from the application driver
        # Emulate histograms for CodeGenerator
        - pattern: metrics<name=(S+).(S+).driver.CodeGenerator.(.*)><>Count
          name: spark_driver_CodeGenerator_$3_count
          type: COUNTER
          labels:
            app_namespace: "$1"
            app_id: "$2"
        # These come from the application driver
        # Emulate timer (keep only count attribute) plus counters for LiveListenerBus
        - pattern: metrics<name=(S+).(S+).driver.LiveListenerBus.(.*)><>Count
          name: spark_driver_LiveListenerBus_$3_count
          type: COUNTER
          labels:
            app_namespace: "$1"
            app_id: "$2"
        # Get Gauge type metrics for LiveListenerBus
        - pattern: metrics<name=(S+).(S+).driver.LiveListenerBus.(.*)><>Value
          name: spark_driver_LiveListenerBus_$3
          type: GAUGE
          labels:
            app_namespace: "$1"
            app_id: "$2"
        # Executors counters
        - pattern: metrics<name=(S+).(S+).(.*).executor.(.*)><>Count
          name: spark_executor_$4_count
          type: COUNTER
          labels:
            app_namespace: "$1"
            app_id: "$2"
            executor_id: "$3"
        # [ADD]
        - pattern: metrics<name=(S+).(S+).([0-9]+).executor.(.*)><>Value
          name: spark_executor_$4
          type: GAUGE
          labels:
            app_namespace: "$1"
            app_id: "$2"
            executor_id: "$3"
        # These come from the application executors
        # Example: app-20160809000059-0000.0.jvm.threadpool.activeTasks
        - pattern: metrics<name=(S+).(S+).([0-9]+).(jvm|NettyBlockTransfer).(.*)><>Value
          name: spark_executor_$4_$5
          type: GAUGE
          labels:
            app_namespace: "$1"
            app_id: "$2"
            executor_id: "$3"
        - pattern: metrics<name=(S+).(S+).([0-9]+).HiveExternalCatalog.(.*)><>Count
          name: spark_executor_HiveExternalCatalog_$4_count
          type: COUNTER
          labels:
            app_namespace: "$1"
            app_id: "$2"
            executor_id: "$3"
        # These come from the application driver
        # Emulate histograms for CodeGenerator
        - pattern: metrics<name=(S+).(S+).([0-9]+).CodeGenerator.(.*)><>Count
          name: spark_executor_CodeGenerator_$4_count
          type: COUNTER
          labels:
            app_namespace: "$1"
            app_id: "$2"
            executor_id: "$3"

镜像配置

在根目录创建 metrics 文件夹:

metrics 文件夹

metrics.properties

properties 复制代码
*.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink
# Enable JvmSource for instance master, worker, driver and executor
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

prometheus.yaml

yaml 复制代码
---
lowercaseOutputName: true
attrNameSnakeCase: true
rules:
  - pattern: metrics<name=(S+).(S+).driver.(BlockManager|DAGScheduler|jvm).(S+)><>Value
    name: spark_driver_$3_$4
    type: GAUGE
    labels:
      app_namespace: "$1"
      app_id: "$2"
  # [ADD]
  - pattern: metrics<name=(S+).(S+).driver.(BlockManager|DAGScheduler|jvm).(S+).(S+)><>Value
    name: spark_driver_$3_$4_$5
    type: GAUGE
    labels:
      app_namespace: "$1"
      app_id: "$2"
  - pattern: metrics<name=(S+).(S+).driver.(S+).StreamingMetrics.streaming.(S+)><>Value
    name: spark_streaming_driver_$4
    type: GAUGE
    labels:
      app_namespace: "$1"
      app_id: "$2"
  - pattern: metrics<name=(S+).(S+).driver.spark.streaming.(S+).(S+)><>Value
    name: spark_structured_streaming_driver_$4
    type: GAUGE
    labels:
      app_namespace: "$1"
      app_id: "$2"
      query_name: "$3"
  - pattern: metrics<name=(S+).(S+).(S+).executor.(S+)><>Value
    name: spark_executor_$4
    type: GAUGE
    labels:
      app_namespace: "$1"
      app_id: "$2"
      executor_id: "$3"
  - pattern: metrics<name=(S+).(S+).driver.DAGScheduler.(.*)><>Count
    name: spark_driver_DAGScheduler_$3_count
    type: COUNTER
    labels:
      app_namespace: "$1"
      app_id: "$2"
  - pattern: metrics<name=(S+).(S+).driver.HiveExternalCatalog.(.*)><>Count
    name: spark_driver_HiveExternalCatalog_$3_count
    type: COUNTER
    labels:
      app_namespace: "$1"
      app_id: "$2"
  - pattern: metrics<name=(S+).(S+).driver.CodeGenerator.(.*)><>Count
    name: spark_driver_CodeGenerator_$3_count
    type: COUNTER
    labels:
      app_namespace: "$1"
      app_id: "$2"
  - pattern: metrics<name=(S+).(S+).driver.LiveListenerBus.(.*)><>Count
    name: spark_driver_LiveListenerBus_$3_count
    type: COUNTER
    labels:
      app_namespace: "$1"
      app_id: "$2"
  - pattern: metrics<name=(S+).(S+).driver.LiveListenerBus.(.*)><>Value
    name: spark_driver_LiveListenerBus_$3
    type: GAUGE
    labels:
      app_namespace: "$1"
      app_id: "$2"
  - pattern: metrics<name=(S+).(S+).(.*).executor.(.*)><>Count
    name: spark_executor_$4_count
    type: COUNTER
    labels:
      app_namespace: "$1"
      app_id: "$2"
      executor_id: "$3"
  # [ADD]
  - pattern: metrics<name=(S+).(S+).([0-9]+).executor.(.*)><>Value
    name: spark_executor_$4
    type: GAUGE
    labels:
      app_namespace: "$1"
      app_id: "$2"
      executor_id: "$3"
  - pattern: metrics<name=(S+).(S+).([0-9]+).(jvm|NettyBlockTransfer).(.*)><>Value
    name: spark_executor_$4_$5
    type: GAUGE
    labels:
      app_namespace: "$1"
      app_id: "$2"
      executor_id: "$3"
  - pattern: metrics<name=(S+).(S+).([0-9]+).HiveExternalCatalog.(.*)><>Count
    name: spark_executor_HiveExternalCatalog_$4_count
    type: COUNTER
    labels:
      app_namespace: "$1"
      app_id: "$2"
      executor_id: "$3"
  - pattern: metrics<name=(S+).(S+).([0-9]+).CodeGenerator.(.*)><>Count
    name: spark_executor_CodeGenerator_$4_count
    type: COUNTER
    labels:
      app_namespace: "$1"
      app_id: "$2"
      executor_id: "$3"

Dockerfile 配置

在 Dockerfile 中增加以下内容:

Dockerfile 配置
dockerfile 复制代码
RUN mkdir -p /opt/spark/metrics/conf
COPY metrics/metrics.properties /opt/spark/metrics/conf
COPY metrics/prometheus.yaml /opt/spark/metrics/conf

可用指标提供者列表

Spark 使用的指标有多种类型:gauge、counter、histogram、meter 和 timer,详见 Dropwizard 库文档。以下组件和指标列表报告了名称及有关可用指标的一些详细信息,按组件实例和源命名空间分组。

Componentinstance=Driver

这是具有最多仪器化指标的组件。

  • namespace=BlockManager

    • disk.diskSpaceUsed_MB
    • memory.maxMem_MB
    • memory.maxOffHeapMem_MB
    • memory.maxOnHeapMem_MB
    • memory.memUsed_MB
    • memory.offHeapMemUsed_MB
    • memory.onHeapMemUsed_MB
    • memory.remainingMem_MB
    • memory.remainingOffHeapMem_MB
    • memory.remainingOnHeapMem_MB
  • namespace=HiveExternalCatalog

    • 注意: 这些指标依赖于配置参数 spark.metrics.staticSources.enabled(默认值为 true)。
    • fileCacheHits.count
    • filesDiscovered.count
    • hiveClientCalls.count
    • parallelListingJobCount.count
    • partitionsFetched.count
  • namespace=CodeGenerator

    • 注意: 这些指标依赖于配置参数 spark.metrics.staticSources.enabled(默认值为 true)。
    • compilationTime (histogram)
    • generatedClassSize (histogram)
    • generatedMethodSize (histogram)
    • sourceCodeSize (histogram)
  • namespace=DAGScheduler

    • job.activeJobs
    • job.allJobs
    • messageProcessingTime (timer)
    • stage.failedStages
    • stage.runningStages
    • stage.waitingStages
  • namespace=LiveListenerBus

    • listenerProcessingTime.org.apache.spark.HeartbeatReceiver (timer)
    • listenerProcessingTime.org.apache.spark.scheduler.EventLoggingListener (timer)
    • listenerProcessingTime.org.apache.spark.status.AppStatusListener (timer)
    • numEventsPosted.count
    • queue.appStatus.listenerProcessingTime (timer)
    • queue.appStatus.numDroppedEvents.count
    • queue.appStatus.size
    • queue.eventLog.listenerProcessingTime (timer)
    • queue.eventLog.numDroppedEvents.count
    • queue.eventLog.size
    • queue.executorManagement.listenerProcessingTime (timer)
  • namespace=appStatus(所有指标类型为 counter)

    • 注意: 在 Spark 3.0 中引入。依赖于配置参数 spark.metrics.appStatusSource.enabled(默认值为 false)。
    • stages.failedStages.count
    • stages.skippedStages.count
    • stages.completedStages.count
    • tasks.blackListedExecutors.count(已弃用,请使用 excludedExecutors)
    • tasks.excludedExecutors.count
    • tasks.completedTasks.count
    • tasks.failedTasks.count
    • tasks.killedTasks.count
    • tasks.skippedTasks.count
    • tasks.unblackListedExecutors.count(已弃用,请使用 unexcludedExecutors)
    • tasks.unexcludedExecutors.count
    • jobs.succeededJobs
    • jobs.failedJobs
    • jobDuration
  • namespace=AccumulatorSource

    • 注意: 用户可配置的源,用于将累加器附加到指标系统。
    • DoubleAccumulatorSource
    • LongAccumulatorSource
  • namespace=spark.streaming

    • 注意: 仅适用于 Spark Structured Streaming。依赖于配置参数 spark.sql.streaming.metricsEnabled=true(默认值为 false)。
    • eventTime-watermark
    • inputRate-total
    • latency
    • processingRate-total
    • states-rowsTotal
    • states-usedBytes
  • namespace=JVMCPU

    • jvmCpuTime
  • namespace=executor

    • 注意: 这些指标仅在本地模式下在驱动程序中可用。
    • 此命名空间中可用指标的完整列表可以在 Executor 组件实例的相应条目中找到。
  • namespace=ExecutorMetrics

    • 注意: 这些指标依赖于配置参数 spark.metrics.executorMetricsSource.enabled(默认值为 true)。
    • 此源包含与内存相关的指标。此命名空间中可用指标的完整列表可以在 Executor 组件实例的相应条目中找到。
  • namespace=ExecutorAllocationManager

    • 注意: 这些指标仅在启用动态分配时发出。依赖于配置参数 spark.dynamicAllocation.enabled(默认值为 false)。
    • executors.numberExecutorsToAdd
    • executors.numberExecutorsPendingToRemove
    • executors.numberAllExecutors
    • executors.numberTargetExecutors
    • executors.numberMaxNeededExecutors
    • executors.numberExecutorsGracefullyDecommissioned.count
    • executors.numberExecutorsDecommissionUnfinished.count
    • executors.numberExecutorsExitedUnexpectedly.count
    • executors.numberExecutorsKilledByDriver.count
  • namespace=plugin.

    • 可选命名空间。此命名空间中的指标由用户提供的代码定义,并使用 Spark 插件 API 进行配置。有关如何将自定义插件加载到 Spark 中的详细信息,请参阅“高级仪器”部分。

Componentinstance=Executor

这些指标由 Spark 执行器公开。

  • namespace=executor(指标类型为 counter 或 gauge)

    • spark.executor.metrics.fileSystemSchemes(默认值:file,hdfs)确定暴露的文件系统指标。
    • 注意:
    • bytesRead.count
    • bytesWritten.count
    • cpuTime.count
    • deserializeCpuTime.count
    • deserializeTime.count
    • diskBytesSpilled.count
    • filesystem.file.largeRead_ops
    • filesystem.file.read_bytes
    • filesystem.file.read_ops
    • filesystem.file.write_bytes
    • filesystem.file.write_ops
    • filesystem.hdfs.largeRead_ops
    • filesystem.hdfs.read_bytes
    • filesystem.hdfs.read_ops
    • filesystem.hdfs.write_bytes
    • filesystem.hdfs.write_ops
    • jvmGCTime.count
    • memoryBytesSpilled.count
    • recordsRead.count
    • recordsWritten.count
    • resultSerializationTime.count
    • resultSize.count
    • runTime.count
    • shuffleBytesWritten.count
    • shuffleFetchWaitTime.count
    • shuffleLocalBlocksFetched.count
    • shuffleLocalBytesRead.count
    • shuffleRecordsRead.count
    • shuffleRecordsWritten.count
    • shuffleRemoteBlocksFetched.count
    • shuffleRemoteBytesRead.count
    • shuffleRemoteBytesReadToDisk.count
    • shuffleTotalBytesRead.count
    • shuffleWriteTime.count
    • succeededTasks.count
    • threadpool.activeTasks
    • threadpool.completeTasks
    • threadpool.currentPool_size
    • threadpool.maxPool_size
    • threadpool.startedTasks
  • namespace=ExecutorMetrics

    • ProcessTreeJVMVMemory
    • ProcessTreeJVMRSSMemory
    • ProcessTreePythonVMemory
    • ProcessTreePythonRSSMemory
    • ProcessTreeOtherVMemory
    • ProcessTreeOtherRSSMemory
    • 注意: “ProcessTree_” 指标仅在特定条件下收集。这些条件是 /proc 文件系统存在且 spark.executor.processTreeMetrics.enabled=true。当这些条件不满足时,“ProcessTree_” 指标报告为 0。
    • 这些指标依赖于配置参数 spark.metrics.executorMetricsSource.enabled(默认值为 true)。
    • ExecutorMetrics 作为执行器和驱动程序的心跳进程的一部分定期更新:spark.executor.heartbeatInterval(默认值为 10 秒)。
    • 可选更快的轮询机制可用于执行器内存指标,可以通过设置轮询间隔(以毫秒为单位)来激活,使用配置参数 spark.executor.metrics.pollingInterval
    • 注意:
    • JVMHeapMemory
    • JVMOffHeapMemory
    • OnHeapExecutionMemory
    • OnHeapStorageMemory
    • OnHeapUnifiedMemory
    • OffHeapExecutionMemory
    • OffHeapStorageMemory
    • OffHeapUnifiedMemory
    • DirectPoolMemory
    • MappedPoolMemory
    • MinorGCCount
    • MinorGCTime
    • MajorGCCount
    • MajorGCTime
    • “ProcessTree*” 指标计数器:
  • namespace=JVMCPU

    • jvmCpuTime
  • namespace=NettyBlockTransfer

    • shuffle-client.usedDirectMemory
    • shuffle-client.usedHeapMemory
    • shuffle-server.usedDirectMemory
    • shuffle-server.usedHeapMemory
  • namespace=HiveExternalCatalog

    • 注意: 这些指标依赖于配置参数 spark.metrics.staticSources.enabled(默认值为 true)。
    • fileCacheHits.count
    • filesDiscovered.count
    • hiveClientCalls.count
    • parallelListingJobCount.count
    • partitionsFetched.count
  • namespace=CodeGenerator

    • 注意: 这些指标依赖于配置参数 spark.metrics.staticSources.enabled(默认值为 true)。
    • compilationTime (histogram)
    • generatedClassSize (histogram)
    • generatedMethodSize (histogram)
    • sourceCodeSize (histogram)
  • namespace=plugin.

    • 可选命名空间。此命名空间中的指标由用户提供的代码定义,并使用 Spark 插件 API 进行配置。有关如何将自定义插件加载到 Spark 中的详细信息,请参阅“高级仪器”部分。

Source= JVM Source

注意:

  • 通过设置相关的 metrics.properties 文件条目或配置参数来激活此源:spark.metrics.conf.*.source.jvm.class=org.apache.spark.metrics.source.JvmSource
  • 这些指标依赖于配置参数 spark.metrics.staticSources.enabled(默认值为 true)。
  • 此源可用于驱动程序和执行器实例,也可用于其他实例。
  • 此源使用 Dropwizard/Codahale Metric Sets for JVM instrumentation 提供有关 JVM 指标的信息,特别是 BufferPoolMetricSet、GarbageCollectorMetricSet 和 MemoryUsageGaugeSet。

Componentinstance=applicationMaster

注意: 适用于在 YARN 上运行时。

  • numContainersPendingAllocate
  • numExecutorsFailed
  • numExecutorsRunning
  • numLocalityAwareTasks
  • numReleasedContainers

Componentinstance=mesos_cluster

注意: 适用于在 Mesos 上运行时。

  • waitingDrivers
  • launchedDrivers
  • retryDrivers

Componentinstance=master

注意: 适用于在 Spark 独立模式下作为 master 运行时。

  • workers
  • aliveWorkers
  • apps
  • waitingApps

Componentinstance=ApplicationSource

注意: 适用于在 Spark 独立模式下作为 master 运行时。

  • status
  • runtime_ms
  • cores

Componentinstance=worker

注意: 适用于在 Spark 独立模式下作为 worker 运行时。

  • executors
  • coresUsed
  • memUsed_MB
  • coresFree
  • memFree_MB

Componentinstance=shuffleService

注意: 适用于 shuffle 服务。

  • blockTransferRate (meter) - 块传输速率
  • blockTransferMessageRate (meter) - 块传输消息速率,即如果启用了批量获取,则此表示批次数而不是块数
  • blockTransferRateBytes (meter)
  • blockTransferAvgTime_1min (gauge - 1 分钟移动平均值)
  • numActiveConnections.count
  • numRegisteredConnections.count
  • numCaughtExceptions.count
  • openBlockRequestLatencyMillis (histogram)
  • registerExecutorRequestLatencyMillis (histogram)
  • registeredExecutorsSize
  • shuffle-server.usedDirectMemory
  • shuffle-server.usedHeapMemory

参考:

end