工作原理图

 

源代码分析

包名:org.apache.spark.deploy.worker

启动driver入口点:registerWithMaster方法中的case LaunchDriver

) => DriverState.FINISHED
37                case _ => DriverState.FAILED
38              }
39            }
40   
41          finalState = Some(state)
42          // 向Driver所属worker发送DriverStateChanged消息
43          worker ! DriverStateChanged(driverId, state, finalException)
44        }
45      }.start()
46  }

 

LaunchExecutor

管理LaunchExecutor的启动

case LaunchExecutor(masterUrl, appId, execId, appDesc, cores_, memory_) =>
    if (masterUrl != activeMasterUrl) {
    logWarning("Invalid Master (" + masterUrl + ") attempted to launch executor.")
    } else {
    try {
      logInfo("Asked to launch executor %s/%d for %s".format(appId, execId, appDesc.name))
 
      // Create the executor's working directory
      // 创建executor本地工作目录
10        val executorDir = new File(workDir, appId + "/" + execId)
11        if (!executorDir.mkdirs()) {
12          throw new IOException("Failed to create directory " + executorDir)
13        }
14   
15        // Create local dirs for the executor. These are passed to the executor via the
16        // SPARK_LOCAL_DIRS environment variable, and deleted by the Worker when the
17        // application finishes.
18        val appLocalDirs = appDirectories.get(appId).getOrElse {
19          Utils.getOrCreateLocalRootDirs(conf).map { dir =>
20            Utils.createDirectory(dir).getAbsolutePath()
21          }.toSeq
22        }
23        appDirectories(appId) = appLocalDirs
24        // 创建ExecutorRunner对象
25        val manager = new ExecutorRunner(
26          appId,
27          execId,
28          appDesc.copy(command = Worker.maybeUpdateSSLSettings(appDesc.command, conf)),
29          cores_,
30          memory_,
31          self,
32          workerId,
33          host,
34          webUi.boundPort,
35          publicAddress,
36          sparkHome,
37          executorDir,
38          akkaUrl,
39          conf,
40          appLocalDirs, ExecutorState.LOADING)
41        // executor加入本地缓存
42        executors(appId + "/" + execId) = manager
43        manager.start()
44        // 增加worker已使用core
45        coresUsed += cores_
46        // 增加worker已使用memory
47        memoryUsed += memory_
48        // 通知master发送ExecutorStateChanged消息
49        master ! ExecutorStateChanged(appId, execId, manager.state, None, None)
50      }
51      // 异常情况处理,通知master发送ExecutorStateChanged FAILED消息
52      catch {
53        case e: Exception => {
54          logError(s"Failed to launch executor $appId/$execId for ${appDesc.name}.", e)
55          if (executors.contains(appId + "/" + execId)) {
56            executors(appId + "/" + execId).kill()
57            executors -= appId + "/" + execId
58          }
59          master ! ExecutorStateChanged(appId, execId, ExecutorState.FAILED,
60            Some(e.toString), None)
61        }
62      }
63  }

 

总结

1、Worker、Driver、Application启动后都会向Master进行注册,并缓存到Master内存数据模型中
2、完成注册后发送LaunchExecutor、LaunchDriver到Worker
3、Worker收到消息后启动executor和driver进程,并调用Worker的ExecutorStateChanged和DriverStateChanged方法
4、发送ExecutorStateChanged和DriverStateChanged消息到Master的,根据各自的状态信息进行处理,最重要的是会调用schedule方法进行资源的重新调度

Spark系列(八)Worker工作原理的更多相关文章

  1. Spark系列(十)TaskSchedule工作原理

    工作原理图 源码分析: 1.) 25              launchedTask = true 26            } 27          } catch { 28         ...

  2. Spark系列(九)DAGScheduler工作原理

    以wordcount为示例进行深入分析 1  33  ) { 46        logInfo("Submitting " + tasks.size + " missi ...

  3. line-height系列——定义和工作原理总结

    一.line-height的定义和工作原理总结 line-height的属性值: normal    默认  设置合理的行间距. number  设置数字,此数字会与当前的字体尺寸相乘来设置行间距li ...

  4. 源码分析八( hashmap工作原理)

    首先从一条简单的语句开始,创建了一个hashmap对象: Map<String,String> hashmap = new HashMap<String,String>(); ...

  5. [Spark内核] 第32课:Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等

    本課主題 Spark Worker 原理 Worker 启动 Driver 源码鉴赏 Worker 启动 Executor 源码鉴赏 Worker 与 Master 的交互关系 [引言部份:你希望读者 ...

  6. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  7. How Javascript works (Javascript工作原理) (八) WebAssembly 对比 JavaScript 及其使用场景

    个人总结: webworker有以下三种: Dedicated Workers 由主进程实例化并且只能与之进行通信 Shared Workers 可以被运行在同源的所有进程访问(不同的浏览的选项卡,内 ...

  8. 49、Spark Streaming基本工作原理

    一.大数据实时计算介绍 1.概述 Spark Streaming,其实就是一种Spark提供的,对于大数据,进行实时计算的一种框架.它的底层,其实,也是基于我们之前讲解的Spark Core的. 基本 ...

  9. 46、Spark SQL工作原理剖析以及性能优化

    一.工作原理剖析 1.图解 二.性能优化 1.设置Shuffle过程中的并行度:spark.sql.shuffle.partitions(SQLContext.setConf()) 2.在Hive数据 ...

随机推荐

  1. Photoshop:建议设置

    一.新建文档设置: 二.对齐设置 菜单->视图->对齐->全部 使用图层.形状等操作时自动对齐网格,画矢量图不怕模糊边缘,确保每个像素保持清晰. 三.首选项设置 关掉"启用 ...

  2. Xaml语法概述及属性介绍

    Xaml语法概述 1.命名空间     xmal每个元素都对应着一个类,但是在xmal中,只提供类名是不够的,需要知道该类实在.net的哪个命名空间下面.Xaml解析器才能够正确的解析. 1 < ...

  3. WP布局之Pivot和Panorama

    一.Pivot控件(枢轴控件) Pivot主要用于管理应用中的视图或者页面,此控件在WP中几乎处处可见,不管是短信的左右滑动,还是QQ的左右滑动都是此控件的功劳. 就是图片中的控件,是不是很熟悉呢. ...

  4. 显示Servlet API主要版本,次要版本以及服务器系统信息

    package com.mhb; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servle ...

  5. linux 进入包含空格文件名的文件夹

    可以使用加英文的引号cd  /usr/chen/java/"MyeClips\ 如果"\"在行末,是说明本行还未结束,下面一行和本行是一起的意思. 一般短格式的选项(一个 ...

  6. Linux使用者管理(1)---用户账号

    linux很重要的应用就是作为服务器的操作系统.服务器的作用是给多用户提供各种“服务”(可能是读服务器上的文件,或者是利用服务器进行数值计算)那么如果多用户共同拥有一台服务器,就需要对服务器上的用户进 ...

  7. php程序员应具有的7种能力

    php程序员应具有什么样的能力,才能更好的完成工作,才会有更好的发展方向呢?在中国我想您不会写一辈子代码的,那样不可能,过了黄金期,您又怎么办呢?看了本文后,希望对您有所帮助. 一,php能力 1,了 ...

  8. cdev_init函数

    linux-2.6.22/include/linux/cdev.hstruct cdev {   struct kobject kobj;          // 每个 cdev 都是一个 kobje ...

  9. 新装的win7 64位系统上装了IE11,想调试网页的时候,按F12,工具会出来,但是没法正常使用,出现空白。

    Windows专区开了一帖,没人应.这边再开一帖,看看各位遇到过没.如题,新装的win7 64位系统上装了IE11,想调试网页的时候,按F12,工具会出来,但是没法正常使用.尤其是想切换文档模式,只能 ...

  10. scrapy wiki资料汇总

    See also: Scrapy homepage, Official documentation, Scrapy snippets on Snipplr Getting started If you ...