转载自:https://www.cnblogs.com/barrenlake/p/4364644.html

Spark 监控相关的部分有WebUi 及 Metrics System; WebUi用于展示Spark 资源状态、Metrics System 整合的指标信息。

Ui相关流程

Spark集群启动之后,我们可以通过Web观察集群状态等信息,这一部分工作是Spark WebUi 模块实现。

Servlet容器启动:

Master创建时,会通过val webUi = new MasterWebUI(this, webUiPort)创建webUi,

在启动Master时(perStart()中)通过webUi.bind()启动JettyServer,即Servlet容器。

Master的preStart()的源码如下所示

又webUi.bind()的源码如下所示:

WebUI页面信息

创建的MasterWebUI初始化时会添加三个页面和一个静态资源处理器,其初始化代码如下:

其中 attachPage方法代码如下:

其在添加页面时将初始化,页面地址pagePath,创建并绑定请求处理器,以及指定响应方法page.render(request).

其中createServletHandler实现如下:

此函数中会调用另一重载方法,其又会调用creatServlet方法,创建Servlet用于对外提供服务。createServlet方法代码如下所示:

Servlet中doGet方法用来处理get请求, 具体业务逻辑由传入的servletParams提供。

下面以attachPage(new MasterPage(this))为例对servletParams进行说明,由上文源码示例attachPage可知 (request: HttpServletRequest) => page.render(request)为servletParams。此参数意为使用page.render(request)对request进行处理。

MasterPage

MasterPage负责对master页面的请求,请求路径为http://master:webUiPort/或http://master:webUiPort/json.

下面http://master:webUiPort/json请求进行说明,当servlet接收到请求后,通过page.renderJson对其进行处理, renderJson源程序代码如下:

通过分析源代码可知:renderjson首先向master发送消息RequestMasterState,请求Master的状态信息. 然后阻塞等待结果,然后将结果转换成JSON格式、返回。

Master收到RequestMasterState消息后:

将其状态信息封装成MasterStateResponse对象发送给请求者。

Spark MetricsSystem 运行机制

Spark中的Metrics System 特殊的“实例”创建的,结合数据源、数据汇(接收点)的系统,其作用是定期将数据指标从数据源拉到数据汇。

实例(instance):创建Metrics的实例一般指使用Metrics System的角色。Spark中有多种角色,像master, worker, executor, client Driver,这些角色会创建Metrics System用于监控。所以这里所说的“实例”代表这些角色。当前,Spark中已实现的实例有:master,worker, executor,driver, applications.

数据源(source): 从哪里收集数据指标,在Metrics System中存在两种类型的数据源:

Spark 内部源,像MasterSource, WorkerSource等,这些源会收集Spark组件的状态,它们与Spark中角色相关,当Metrics System创建后,它们会在Metrics System中注册。

共用源,通过配制文件配制并通过反射机制进行加载,会收集更底层的状态指标,像JvmSource。

数据汇(sink):收集的数据指标输出的目的地,目的地可以是控制台,Servlet等。

下面以Master为入口对Metrics System工作机制做详细说明:

伴随Master的创建会创建MetricsSystem、MasterSource、WebUI等对象

在Master启动时会执行以下动作:  

  绑定WebUI

  将MasterSource注册到Metrics中,

  启动MetricsSystem,并将其servlethandler绑定到WebUI.

MetricsConfig

创建MetricsConfig时会创建并初始化MetricsConfig, MetricsConfig将持有一个HashMap类型的propertyCategories,其用来存放处理过的属性集合。再获取MetricsConfig实例时都将会从此属性中取相应的MetricsConfig配制.如下代码所示:若存在指定key的属性,则返回;否则返回默认值。

propertyCategories将在MetricsConfig初始化时(initialize())调用时对其赋值,初始化过程如下:

防止没有属性文件,添加默认属性。

检测spark.metrics.conf是否设置,若未设置则试着去classpath下寻找”metrics.properties”文件。若存在配制文件,则将其属性载入properties。

然后将properties中内容进行抽取、分类、归并处理,其代码如下:

若不存在配制文件的情况下,系统只有默认添加属性,经上述代码处理的结果为:

applications -> {sink.servlet.class=org.apache.spark.metrics.sink.MetricsServlet, sink.servlet.path=/metrics/applications/json}master -> {sink.servlet.class=org.apache.spark.metrics.sink.MetricsServlet, sink.servlet.path=/metrics/master/json}* -> {sink.servlet.class=org.apache.spark.metrics.sink.MetricsServlet, sink.servlet.path=/metrics/json}

其中subProperties()方法是对properties属性进行抽取、规类。代码如下:

注册数据源: MetricsSystem启动时

当MetricsSystem 在启动时将会调用注册数据源函数registerSources(),注册实例相关的所有数据源。

上面是registerSources相关代码,其通过getInstance()方法获取该instance相关的配制属性。然后通过subProperties方法进行抽取、归类。然后取出key为class的属性,利用java反射机制创建Source对象并进行注册。默认情况下不存在Source相关属性,所以此例中MasterSource唯一数据源。

其通过MetricsConfig的getInstance()方法。该方法会以传入的instance做为key 去propertyCategories中取属性值

注册数据汇(目的地)

MetricsSystem的start()方法通过调用registerSinks()方法来注册数据汇(数据指标接收点)。程序代码如下所示:

通过分析此方法的源码,若未通过配制文件指定MetricsConfig属性,则将只通过反射创建MetricsServlet,其内部再创建ServletHander交付WebUI使用。但此MetricsServlet并未做为sink添加到sinks列表,至此 sinks列表仍为空,MetricsSystem的start()方法中调用sinks.foreach(_.start)时将不执行任何动作。换句话说,在默认情况下,registerSinks方法只是对MetricsServlet进行实例化用。

MetricsServlet的创建

MetricsSystem在注册Sink时, 会创建MetricsServlet, MetricsServlet的映射地址为propertyCategories是path属性对应项,其做为一个web服务,用于对相应请求进行处理。 MetricsServlet会通过调用jettyUtils的createServletHandler方法ServletContextHandler,创建Handler。其核心代码如下:

此方法将创建以/metrics/master/json为请求路径的httpServlet, 影响类型为JSON串。

然后并将创建的Hander赋值给通过MetircsSystem的getServletHander方法交由WebUi处理。

getServletHander方法程序代码如下所示:

转载于:https://www.cnblogs.com/itboys/p/11122177.html

spark 监控--WebUi、Metrics System(转载)相关推荐

  1. JAVA监控之Metrics

    1. Metrics是什么? 它是一个工具集,不是一个框架.它在kafka,spark,hadoop,flink和cassandra等流行框架中都得到了广泛的应用. 官网:https://metric ...

  2. 20个命令行工具监控 Linux 系统性能(转载)

    1. top - Linux 系统进程监控 top 命令是性能监控程序,它可以在很多 Linux/Unix 版本下使用,并且它也是 Linux 系统管理员经常使用的监控系统性能的工具.Top 命令可以 ...

  3. 监控告警 Metrics - Prometheus

    一.分布式系统关键技术: 监控 突发急诊 定位问题 应对突发流量 健康体检 容量管理 性能管理 监控是给开发人员一把测量反馈"尺",要想提升,必须先要测量.意味着了解系统内部发生了 ...

  4. java系统监控_Java Metrics系统性能监控工具

    Metrics是一个Java库,可以对系统进行监控,统计一些系统的性能指标. 比如一个系统后台服务,我们可能需要了解一下下面的一些情况: 1.每秒钟的请求数是多少(TPS)? 2.平均每个请求处理的时 ...

  5. 理解spark闭包以及broadcast(转载)

    什么叫闭包: 跨作用域访问函数变量. 又指的一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. Spark闭包的问题引出:  在spark中实现统计L ...

  6. spark Error initializing SparkContext System memory 466092032 must be at least 471859200.

    ERROR SparkContext: Error initializing SparkContext. Java.lang.IllegalArgumentException: System memo ...

  7. jmeter 性能监控PerfMon Metrics Collector的讲解

    举例 要进行性能监控就必须在服务器上安装个插件,就像咱们在服务器上安装了一个监控探头,启动起来,jmeter就相当于查看监控的仪器. 如何做 下载插件,官方文档地址https://jmeter-plu ...

  8. VSAM:视频监控系统 A System for Video Surveillance and Monitoring

    VSAM(VideoSurveillance and Monitoring)视频监控系统 Robotics Institute CMU 1:引言 2:试验床介绍 3:基本的视频分析算法:运动目标检测, ...

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

    监控管理 监控管理 UI监控 实时UI监控 历史UI监控 Metrics 输入源(Metrics Source)介绍 输出方式(Metrics Sink)介绍 TEST 监控管理 Spark提供了UI ...

最新文章

  1. 一道面试题:用多种方法实现两个数的交换
  2. shell实例第6讲:检查主机存活状态
  3. 将dos格式文件转换为unix格式
  4. 第12章 与Spring集成
  5. python一键取消注释_Python文件去除注释的方法
  6. 生信入门-爱课程上的华中农业大学
  7. js获取html元素并且修改属性,JavaScript中获取和修改元素属性的值
  8. Android Studio添加android.support.v4包的依赖(解决V4的FragmentManager的错误)
  9. 汇编语言王爽---第四版
  10. vue的万年历(日历)组件
  11. ASEMI-PL3369C电源管理芯片IC作用和意义
  12. 数据库应用系统的四个层次划分
  13. 关于立体图形切n刀最多切多少块的结论及推导
  14. 【嵌入式系统基础第九周作业】---LED呼吸灯
  15. 财贸计算机专业,技能月|这所学校的计算机专业部有这些玩法
  16. 服务器盘符修改不了怎么办,服务器怎么修改盘符
  17. R使用仿真数据快速构建列线图(nomogram)示例
  18. 双色球模拟程序 python_python 之双色球预测
  19. 从零打造一个超酷炫的租房可视化查询工具
  20. 犀牛Rhinoceros 5 for Mac(三维建模软件)

热门文章

  1. linux下用c语言写黄金矿工,C语言写的黄金矿工O(∩_∩)O---初稿,能玩了
  2. php 高德地图计算距离,距离、长度、面积
  3. linux 智联 网卡设置,Linux初学者DNS配置指南(四)配置Bind常见问题
  4. linux系统生成的新文件是什么编码的,Linux系统的默认编码怎样设置?
  5. 条令考试小程序辅助器_计算机一级考试干货!
  6. cortex-m3 操作模式 寄存器组 异常类型 堆栈 中断
  7. adminer.php下载,Adminer.php
  8. HTML+CSS+JS实现 ❤️slicebox酷炫3d图片轮播切换❤️
  9. StringBuffer和StringBuild
  10. arduinowin7_win7系统64位系统安装Arduino uno R2 驱动的方法