искровой мониторинг --WebUi, Метрики система (переиздание)

Перепечатано из: https: //www.cnblogs.com/barrenlake/p/4364644.html

Спарк мониторинг соответствующих частей имеют WebUI и Метрики системы; WebUI представитель Spark, государственные ресурсы, информация индекс интеграции Метрики системы.

Процессы, связанные с Ui

После запуска Спарк кластера, мы можем наблюдать состояние кластера и другую информацию через Интернет, эта часть работы Спарк WebUI модули.

Servlet контейнер для запуска:

Когда Мастер создается путем Val  WebUI =  новый новый  MasterWebUI ( это , webUiPort) создать WebUI,

() Начинается JettyServer, то есть, когда контейнеры сервлетов (perStart ()) запускается мастер webUi.bind.

PRESTART магистра () исходный код показан ниже

И webUi.bind () исходный код приведен ниже:

Информация WebUI страницы

MasterWebUI первоначальное создание добавит три страницы и статический процессор ресурса, его код инициализации выглядит следующим образом:

В котором метод attachPage код выглядит следующим образом:

Что инициализируется при добавлении страницы, адрес страницы pagePath, создавать и связывать процессор запрос, и в ответ на указанный метод page.render (запрос).

В котором createServletHandler реализуется следующим образом:

Эта функция будет вызывать другие перегруженные методы, которые, в свою очередь, вызывает метод creatServlet, создать Servlet для внешних услуг. createServlet код метода показан ниже:

Метод сервлет 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方法程序代码如下所示:

 

рекомендация

отwww.cnblogs.com/itboys/p/11122177.html
рекомендация