第三章 Spark运行模式及原理

第三章 Spark运行模式及原理


目录

  1. Spark运行模式概述
  2. Local模式
  3. Standalone模式
  4. Local cluster模式
  5. Mesos模式
  6. YARN standalone/YARN cluster模式
  7. YARN client模式
  8. 各种模式的实现细节比较
  9. Spark1.0版本之后的变化
  10. 小结

注:学习《Spark大数据处理技术》笔记


1. Spark运行模式概述

1. Spark运行模式列表
  1. Spark应用程序的运行模式取决于传递给SparkContext的MASTER环境变量的值,个别模式还需要依赖辅助的程序接口来配合使用,目前所支持的MASTER环境变量由特定的字符串或URL所组成
    1. Local[N]:本地模式,使用N个线程
    2. Local cluster[worker, core, Memory]:伪分布模式,可以配置所需要启动的模拟工作,以及每个工作节点管理的CPU数量和内存尺寸
    3. Spark://hostname:port: Standalone 模式,需要部署Spark到相关节点,URL为Spark Master主机地址和端口
    4. Mesos://hostname:port:Mesos模拟,需要部署Spark和Mesos到相关节点,URL为Mesos主机地址和端口
    5. YARN standalone/YARN cluster:YARN 模式一,主程序逻辑和任务都运行在YARN集群中
    6. YARN client:YARN 模式二,主程序运行在本地,具体任务运行在YARN集群中
2. Spark基本工作流程
  1. 多个运行模式从总体上来说,都基于一个相似的工作流程。从根本上都是将Spark的应用分为任务调度和任务执行两个部分
    1. 分布式模式下,Spark的各个调度和执行模块大致架构图
    在这里插入图片描述
    2. 对于本地模式来说,其内部程序逻辑结构也是类似的,只是其中的部分模块有所简化,例如集群管理模块简化为进程内部的线程池
  2. 从图3-1可知,所有的Spark应用程序都离不开SparkContext和Executor两部分
    1. Executor负责执行任务,运行Executor的机器称为Worker节点
    2. SparkContext由用户程序启动,通过资源调度模块和Executor通信
    3. SparkContext和Executor这两部分的核心代码实现在各个运行模式中都是公用的,在它们之上,根据运行部署模式的不同,包装了不同调度模块以及相关的适配代码
  3. 具体来说,以SparkContext为程序运行的总入口,在SparkContext的初始化过程中,Spark会分别创建DAGScheduler作业调度和TaskScheduler任务调度两级调度模块
    1. 其中作业调度模块是基于任务阶段的高层调度模块,它为每个Spark作业计算具有依赖关系的多个调度阶段(通常根据shuffle来划分),然后为每个阶段构建出一组具体的任务(通常会考虑数据的本地性等),然后以TaskSets(任务组)的形式提交给任务调度模块来具体执行。
    2. 而任务调度模块则负责具体启动任务、监控和汇报任务运行情况
  4. 作业调度模块和具体的部署运行模式无关,在各种运行模式下逻辑相同。
  5. 不同的运行模式的区别主要体现在任务调度模块。不同的部署和运行模式,根据底层资源调度方式的不同,各自实现了自己特定的任务调度模块,用来将任务实际调度给对应的计算资源
3. 相关基本类
  1. TaskScheduler/SchedulerBackend

    1. 为了抽象出一个公共的接口供DAGScheduler作业调度模块使用,所有的这些运行模式实现的任务调度模块都是基于这两个接口的(Trait):TaskScheduler(见程序3-1)及SchedulerBackend(见程序3-2)
      1. TaskScheduler的实现主要用于于DAGScheduler交互,负责任务的具体调度和运行,其核心接口是submitTasks和canceTasks
        在这里插入图片描述
      2. SchedulerBackend的实现是与底层资源调度系统交互(如Mesos/Yarn),配合TaskScheduler实现具体任务执行所需的资源分配,核心接口是receiveOffers
        在这里插入图片描述
      3. 这两者之间的实际交互过程取决于具体的调度模式,理论上这两者的实现是成对匹配工作的,之所以拆分成两部分,是有利于相似的调度模式共享代码功能模块
  2. TaskSchedulerImpl

    1. TaskSchedulerImpl实现了TaskScheduler接口,提供了大多数本地和分布式运行调度模式的任务调度接口
      在这里插入图片描述
    2. 此外,它还实现了resourceOffers和statusUpdate这两个接口供Backend调用,用于提供调度资源和更新任务状态
      在这里插入图片描述
    3. 另外,在提交任务和更新状态等阶段,TaskSchedulerImpl都会调用Backend的receiveOffers函数,用于发起一次任务资源调度请求
  3. Executor

    1. 实际任务的运行,最终都由Executor类来执行,Executor对每一个任务创建一个TaskRunner类,交给线程池运行
      在这里插入图片描述
    2. 运行结果通过ExecutorBackend接口返回
      在这里插入图片描述
  4. 图3-2列出了各种运行模式下相关类的关系图
    在这里插入图片描述

  5. 待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值