spark内核揭秘-08-spark的Web监控页面

在SparkContext中可以看到初始化UI代码:

// Initialize the Spark UI
private[spark] val ui: Option[SparkUI] =
  if (conf.getBoolean("spark.ui.enabled", true)) {
    Some(SparkUI.createLiveUI(this, conf, listenerBus, jobProgressListener,
      env.securityManager,appName))
  } 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
ui.foreach(_.bind())
创建SparkUI对象:
def createLiveUI(
    sc: SparkContext,
    conf: SparkConf,
    listenerBus: SparkListenerBus,
    jobProgressListener: JobProgressListener,
    securityManager: SecurityManager,
    appName: String): SparkUI =  {
  create(Some(sc), conf, listenerBus, securityManager, appName,
    jobProgressListener = Some(jobProgressListener))
}

进入create方法:

spark内核揭秘-08-spark的Web监控页面_第1张图片

spark内核揭秘-08-spark的Web监控页面_第2张图片

进入SparkUI:

spark内核揭秘-08-spark的Web监控页面_第3张图片

SparkUI 继承了WebUI:

spark内核揭秘-08-spark的Web监控页面_第4张图片

而WebUI类定义了def initialize()方法

spark内核揭秘-08-spark的Web监控页面_第5张图片

SparkUI的initialize()实现方法:

spark内核揭秘-08-spark的Web监控页面_第6张图片

上面代码分析:增加页面的tab页面

1、JobsTab:

spark内核揭秘-08-spark的Web监控页面_第7张图片

2、stagesTab:

spark内核揭秘-08-spark的Web监控页面_第8张图片

3、StorageTab:

spark内核揭秘-08-spark的Web监控页面_第9张图片

4、EnvironmentTab:

spark内核揭秘-08-spark的Web监控页面_第10张图片

5、ExecutorsTab:

spark内核揭秘-08-spark的Web监控页面_第11张图片

6、createStaticHandler:

spark内核揭秘-08-spark的Web监控页面_第12张图片

7、createRedirectHandler:

spark内核揭秘-08-spark的Web监控页面_第13张图片

当执行完initialize()方法后,我们回到SparkContext 的Initialize the spark UI:

spark内核揭秘-08-spark的Web监控页面_第14张图片

bind  port:

spark内核揭秘-08-spark的Web监控页面_第15张图片

从上面代码可以看出来,启动了端口号为4040的本地JettyServer

spark内核揭秘-08-spark的Web监控页面_第16张图片

spark内核揭秘-08-spark的Web监控页面_第17张图片

上面代码分析:

1、创建ContextHandlerCollection并将handlers设置到ContextHandlerCollection中

2、增加一个filter:

spark内核揭秘-08-spark的Web监控页面_第18张图片

spark内核揭秘-08-spark的Web监控页面_第19张图片

3、创建Jetty Server并绑定端口号并创建一个QueuedThreadPool,设置到Server中:

spark内核揭秘-08-spark的Web监控页面_第20张图片

4、启动Jetty server,如果启动失败,就抛出异常:

spark内核揭秘-08-spark的Web监控页面_第21张图片

5、试着重试几次启动startServiceOnPort,如果启动失败,就更换新端口号(规则是1+oldPort),重新启动:

spark内核揭秘-08-spark的Web监控页面_第22张图片

spark内核揭秘-08-spark的Web监控页面_第23张图片

spark内核揭秘-08-spark的Web监控页面_第24张图片


最终启动成功后,会把信息东西存放在ServerInfo中:

spark内核揭秘-08-spark的Web监控页面_第25张图片


版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/stark-summer/p/4829814.html

你可能感兴趣的:(spark内核揭秘-08-spark的Web监控页面)