Spark相关进阶知识点

BlockManager是Spark的分布式存储系统

主从结构:BlockManagerMaster/BlockManager(Slave)

BlockManagerMaster

  • 在Driver端启动
  • 负责接受Executor上的BlockManager的注册
  • 管理BlockManager的元数据信息

BlockManager

  • 在每个Executor中启动

  • 负责管理所在节点上的数据

    主要由四部分构成

    • MemoryStore:负责对内存上的数据进行存储和读写
    • DiskStore:负责对磁盘上的数据进行存储和读写
    • BlockTransferService:负责建立网络连接
    • BlockManagerWorker:负责对其他的BlockManager的数据进行读写
  • 当Executor 的BlockManager 执行了增删改操作,那就必须将 block 的 blockStatus 上报给Driver端的BlockManagerMaster

  • BlockManagerMaster 内部的BlockManagerMasterEndPoint 内维护了元数据信息的映射,其内部通过Map、Set等数据结构实现,易于维护增加、更新、删除元数据

  • BlockManager主要维护以下三类数据:

    • Cache缓存的数据
    • 广播变量和累加器
    • Shuffle产生的数

shuffle文件获取过程

  • MapOutputTrack也属于BlockManager中的一个服务,用于管理MapTask的输出

  • 当MapTask在Executor中执行完成之后会生成Shuffle文件,由MapOutputTrack管理,并向Driver端汇报文件地址

  • MapTask为什么需要向Driver端汇报地址?
    基于RDD第五大特性:

    • Spark为每个Task尽可能的提供最佳计算位置 ,移动计算,不移动数据
    • 尽可能让MapTask和ReduceTask在一个Executor中执行,避免大批量的Shuffle文件通过网络在不同的Executor之间进行传输,提升任务运行效率
    • 即让每个Task的数据本地化级别最优

数据本地化级别

Spark任务主要有5个数据本地化级别:

  • PROCESS_LOCAL进程本地化
  • NODE_LOCAL节点本地化
  • NO_PREF无最佳位置
  • RACK_LOCAL机架本地化
  • ANY跨机架调用

资源申请和任务调度

在这里插入图片描述

资源申请:

On Yarn又可以分为两种运行模式:

  • Client客户端模式(常用于上线前的测试)

  • 过程:

    • 在 YARN Client 模式下,spark-submit提交 Spark Job之后,就会提交的本地机器上启动Driver端

    • Driver 启动后会与 ResourceManager (RM)建立通讯并发起启动 ApplicationMaster(AM) 请求
      RM接收到这个 Job 时,会在集群中选一个合适的 NodeManager (NM)并分配一个 Container(具有计算资源的一个容器),然后启动 ApplicationMaster(初始化SparkContext)

    • AM的功能相当于一个 ExecutorLaucher (Executor启动器),负责向 RM申请 Container 资源 ,RM收到请求后便会与 NM通信,启动 Container

    • AM对RM指定 NM分配的 Container 发出启动 Executor 进程请求

    • Executor进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行执行 Job 任务

    • Driver 中的 SparkContext 分配 Task 给 Executor 执行,Executor 运行 Task 并向 Driver 汇报运行的状态、进度、以及最终的计算结果;让 Driver 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务

    • 应用程序运行完成后,AM向 RM申请注销并关闭自己。

在这里插入图片描述

  • Cluster集群模式(任务真正上线时运行的模式)

  • 过程:

    • 在 YARN Cluster 模式下,Spark 任务提交之后会与 RM建立通讯,并发出申请启动 AM请求
    • RM接收到这个 Job 时,会在集群中选一个合适的 NodeManager 并分配一个 Container,然后启动 AM,此时的 AM不仅负责ExecutorLauncher,还兼顾 Driver的作用
    • AM启动后向 RM申请资源启动Executor,RM接到 AM的资源申请后会在合适(有资源的情况下)的 NodeManager 中分配 Container
    • AM对RM指定 NodeManager 分配的 Container 发出启动 Executor 进程请求
    • Executor 进程启动后会向 AM(Driver)反向注册,Executor 全部注册完成后,开始执行执行 Job 任务
    • AM中的 SparkContext 分配 Task 给 Executor 执行,Executor 运行 Task 并向AM(Driver)汇报运行状态、进度、以及最终结果;让 AM(Driver)随时掌握各任务的运行状态,从而可在任务失败时重新启动任务
    • 应用程序运行完成后,ApplicationMaster 向 ResourceManager 申请注销并关闭自己;

在这里插入图片描述

Client模式 VS Cluster模式

Client模式

  • Driver端在任务提交所在节点本地创建
  • 主要用于Job的调试,上线前的测试
  • 便于在本地查看日志
  • 当多用户同时提交多个任务时,Driver 会与 Executor 进行大量的通信,会占用大量IO,导致网卡流量激增而被SA警告

Cluster模式

  • AM兼顾Driver端的作用,在某个NM中创建
  • 适用于任务真正上线
  • 由于AM(Driver)端是在任意某个NM中创建,故不会造成单节点流量激增,也不会导致网卡风暴
  • 无法直接查看日志,需要通过命令或者在WEB界面查看
任务调度
  • Application:基于Spark的应用程序,包含了Driver端和Executor端
  • Driver程序:运行main函数并且新建SparkContext的程序
  • ClusterManager:集群资源管理者,例如Yarn中的 ResourceManager
  • WorkerNode:工作节点,启动Executor的地方,例如Yarn中的NodeManager
  • Executor:在WorkerNode上为某应用启动的一个进程,该进程负责运行任务,并且负责维护存在内存或者磁盘上的数据,每个应用都有各自自独立的Executor
  • Task:线程对象,被发送到某个Executor上的执行单元 *

Application=>job=>Stage=>Task(被Driver送到Executor中执行)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值