Spark源码阅读02-Spark核心原理之监控管理

本文详细介绍了SparkStandalone模式中Master的启动过程,包括UI监控的启动、REST服务的配置,以及Metrics系统的工作原理,特别是MetricsSource和MetricsSink在监控中的作用。还概述了应用程序UI监控的各个部分,如作业、调度阶段和存储监控等。
摘要由CSDN通过智能技术生成

以Standalone为例, 在Master启动的时候会启动UI监控和REST服务,MasterUl监控默认使用8080端口,访问地址为http//host:8080, 同时启动Master和应用程序的Metrics服务。具体代码实现如下:

override def onStart(): Unit = {

logInfo("Starting Spark master at " + masterUrl)

logInfo(s"Running Spark version ${org.apache.spark.SPARK_VERSION}")

//启动Master的UI监控界面,其中HTTP服务由Jetty进行提供

webUi = new MasterWebUI(this, webUiPort)

//默认使用8080端口,访问地址为http://host:8080

webUi.bind()

masterWebUiUrl = “http://” + masterPublicAddress + “:” + webUi.boundPort

if (reverseProxy) {

masterWebUiUrl = conf.get(“spark.ui.reverseProxyUrl”, masterWebUiUrl)

webUi.addProxy()

logInfo(s"Spark Master is acting as a reverse proxy. Master, Workers and " +

s"Applications UIs are available at $masterWebUiUrl")

}

checkForWorkerTimeOutTask = forwardMessageThread.scheduleAtFixedRate(new Runnable {

override def run(): Unit = Utils.tryLogNonFatalError {

self.send(CheckForWorkerTimeOut)

}

}, 0, WORKER_TIMEOUT_MS, TimeUnit.MILLISECONDS)

//启动REST服务,默认端口为4040

if (restServerEnabled) {

val port = conf.getInt(“spark.master.rest.port”, 6066)

restServer = Some(new StandaloneRestServer(address.host, port, conf, self, masterUrl))

}

restServerBoundPort = restServer.map(_.start())

//启动Master和应用程序的Metrics服务,把Master UI监控句柄注入到Master和应用程序的

//Metrics服务中,这样Master监控信息会同时发送到Master和应用程序的Metrics中

masterMetricsSystem.registerSource(masterSource)

masterMetricsSystem.start()

applicationMetricsSystem.start()

// Attach the master and app metrics servlet handler to the web ui after the metrics systems are

// started.

masterMetricsSystem.getServletHandlers.foreach(webUi.attachHandler)

applicationMetricsSystem.getServletHandlers.foreach(webUi.attachHandler)

}

}

Master UI监控页面

在Master UI监控页面上有四部分内容,界面截图如下:

在这里插入图片描述

其中:

  • ① Master概要信息: 内容包括集群Master的访问地址和 REST访问地址, 集群的可用 Worker节点数、 CPU核数、 内存总量、 正在运行/完成运行的应用数量和集群Master的状态等。

  • ② 集群的 Worker 列表:运行在集群中的 Worker 节点列表,显示内容包括 Worker 的编号、访问地址 (IP 地址和端口)、 节点状态、CPU 核数和内存大小等信息, 其中 CPU 核数和内存同时显示了总量和使用盘。

  • ③ 正在运行的应用程序: 显示正在运行在集群中的应用程序列表, 显示内容包括应用程序的编号、名称、使用的 CPU 核数、每个 Worker 节点平均使用内存大小、提交时间、 提交用户、 运行状态和运行耗时等信息。 通过单击应用程序的编号或名称能够看到该应用程序作业和调度阶段的运行情况。

  • ④ 完成运行的应用程序: 显示已经完成运行的应用程序, 已经运行状态包括成功和失败两种情况,显示内容和正在运行的应用程序的显示内容相同

SparkContext 启动时, 启动应用程序的 Ul 监控界面, 默认端口为 4040, 访问地址为 http://host:4040, 其启动代码在SparkContext 实现如下:

_ui =

//默认情况下启动应用程序的UI监控,用于监控作业处理状态

if (conf.getBoolean(“spark.ui.enabled”, true)) {

Some(SparkUI.create(Some(this), _statusStore, _conf, _env.securityManager, appName, “”,

startTime))

} else {

// For tests, do not enable the UI

None

}

// Bind the UI before starting the task scheduler to communicate

// the bound port to the cluster manager properly

//如果端口被占用会逐步递增直至可用,默认端口为4040

ui.foreach(.bind())

_hadoopConfiguration = SparkHadoopUtil.get.newConfiguration(_conf)

// Add each JAR given through the constructor

if (jars != null) {

jars.foreach(addJar)

}

if (files != null) {

files.foreach(addFile)

}

应用程序 UI 监控

应用程序 UI 监控一般包括作业、调度阶段、 存储、 运行环境、Executor和SQL等信息,在SparkStreaming中会增加Streaming监控信息。其还有事件时间轴、执行DAG和SparkStreaming统计3个视图,使得监控更为直观, 可视化视图更加具体。

(1)作业监控页面

在该监控页面中显示了作业的运行情况, 内容包括作业的概要信息、 事件时间轴视图、正运行的作业和已成功运行的作业等信息。

在这里插入图片描述

点击 Completed Jobs的Description下面的内容,可以看该job的运行细节,包括其执行的DAG图。

在这里插入图片描述

(2)调度阶段监控页面

在该监控页面中显示了应用程序调度阶段的运行情况, 内容包括调度阶段概要信息、 正在运行的调度阶段、 已成功运行的调度阶段和运行失败的调度阶段等4个部分。 在调度阶段概要 信息中, 显示了该应用程序运行耗时、采用的调度模式, 以及正在运行/已成功运行/运行失败的调度阶段的数量。

在这里插入图片描述

点击Description下面的内容,可以具体看到某个调度阶段的详细内容。在页面中显示了该调度阶段中任务运行的总体信息、 Executor运行信息和任务的详细运行情况。

在这里插入图片描述

(3)存储监控页面

Spark 中如果 RDD 进行了缓存, 则该情况可以通过存储监控页面进行查看, 监控的内容包括缓存 RDD 名称、存储级别、缓存 Partition 数、 缓存百分比、缓存内存数据大小、缓存 Alluxio 数据大小和存入磁盘数据大小。

在这里插入图片描述

(4) 运行环境监控页面

在该页面中显示了 Spark 的运行环境, 内容包括运行时信息、 系统参数和 Spark 参数等信息。 通过该页面可以确认运行环境以及 Spark 设置的参数是否正确。

在这里插入图片描述

(5) Executor 监控页面

在该页面中先显示了 Spark 集群中运行的 Driver 和 Executor 列表,记录了 Driver 和 Executor基本信息, 如编号、 地址信息和 RDD 数据块个数; 另一方面也记录了在应用程序运行期间的参数, 如内存使用情况、 磁盘使用情况和正在运行/成功完成/失败任务数、 输入数据量、 Shuffle读数据量和 Shuffle 写数据量。

在这里插入图片描述

历史UI监控

默认情况下Spark没有打开历史UI监控功能,当Spark集群重启时,之前运行的应用程序状态信息不能够访问。此时需要打开Spark历史Ul监控配置,配置过程可参考博客

在这里插入图片描述

Metrics


Spark内置了一个可配置的度量系统(Metrics),它是基于Coda Hale的 Metrics库构建的,能够将Spark 内部状态通过HTTP、JMX、CSV等形式呈现给用户。同时,用户也可以以插件的方式将自己实现的数据源(Metrics Source)和数据输出方式(Metrics Sink)添加到Metrics 系统中,从而获取自己需要的据。

在Metrics系统中有两个重要的概念: Metrics Soure 和 Metrics Sink 通过这两个概念定义了Metrics系统的输入和输出。其中:

  • Metrics Source:定义了所需要采集的各种 Metrics,以及如何采集这些 Metrics。这些定义好的Metrics会注册到Metrics系统内部以备使用。

  • Metrics Slink:定义了Metrics的输出行为,采集到的数据以何种方式呈现给用户

下图显示了Metrics系统各模块之间的关系,Metrics Source和 Metrics Slink 以插件的形式被Metrics系统所管理,通过MetricsConfig 配置属性启动相应的插件。

在这里插入图片描述

Metrics系统配置文件为$Spark/conff metrics.properties, 配置项格式如下, 不符合规则配置项系统将忽略。

[instance].sink I source. [name]. [options]=value

  • instance:表示 Spark 内部监控的不同对象,在Spark定义了Master、 Worker、Executor、 Driver和Applications种对象 。用户可以使用通配符*表示所有对象 ,不过配置项有更详细的描述, 则通配符设置值将被覆盖, 如下配置中: *sink.console. period和 *.sink.console. unit 将被master.sink.console. period和master.sink.console. unit所覆盖。

*.sink.console.period = 1O

*.sink.console.unit = seconds

master.sink.console.period = 15

maser.sink.console.unit = seconds

  • sink I source: 设置采集数据输出方式和采集数据源。

  • name: 该名称由用户定义, 表示sink或 source名称。 在如下配置项中, 配置了获取的度量数据以CSV的形式输出。

*.sink.csv.class = org.apache.spark.metrics.sink.CsvSink

*.sink.csv.period = 1

*.sink.csv.unit = minutes

*.sink.csv.directory = /tmp/

  • option:定义了配置项的名称和对应值,在下面的配置项中,配置不同对象数据源名称和对应值。

master.source.jvm.class = org.apache.spark.metrics.source.JvmSource

worker.source.jvm.class = org.apache.spark.me七rics.source.JvmSource

driver.source.jvm.class = org.apache.spark.metrics.source.JvmSource

executor.source.jvm.class = org.apache.spark.metrics.source.JvmSource

输入源(Metrics Source)介绍

在Spark中内置了6种Metrics Source,这些数据源在Master启动或应用程序启动时会随之启动, 具体如下:

  • MasterSource: 主要统计连接的Worker/可用的Worker数量 、提交应用程序 /等待应用 程序数等 Master信息。

  • ApplicationSource: 统计应用程序运行状态、 运行时间和使用的CPU核数等信息。

  • WorkerSource: 统计 Worker节点中运行Executor信息、 使用/剩余CPU核数和使用/剩余内存大小等信息。

  • ExecutorSource: Executor中正在处理任务、 已经完成任务、 线程池总量和使用批等统计信息, 如果使用HDFS文件系统, 则统计其读数据、 写数据等统计信息。

  • DAGSchedulerSource: 统计作业总数和正在运行作业数量, 同时统计正在运行、 等待和失败的调度阶段。

  • BlockManagerSource: 统计内存总量、 已使用和剩余的内存大小以及使用磁盘空间大小。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
g-U379wWZK-1714956098443)]

[外链图片转存中…(img-EC8PoarH-1714956098443)]

[外链图片转存中…(img-IgXHkN9E-1714956098444)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值