zoukankan      html  css  js  c++  java
  • Spark 基础复习【1】

    preliminary:

    Executor:worker节点上的一个进程,通过线程池,并行运行tasks,task来了,找空的线程做。一个application有多个executor

    1.消息通信

    启动时消息通信

    worker向master发送注册消息,master处理完毕后发送注册成功/失败信息,成功的worker定时发送心跳,失败的就结束worker启动。

    运行时消息通信

    sparkcontext向master发送应用注册,master分配executor,executor启动并注册成功发送信息。action操作后创建DAG,交由DAGScheduler解析(末端RDD开始BFS),划分Stage,生成TaskSet,交给TaskScheduler分配executor执行。Driver回收资源

    2.Job执行

    action触发job,根据RDD依赖构建DAG并提交给DAGScheduler。依照宽依赖划分Stage,形成TaskSet交由TaskScheduler。若task崩了,taskScheduler负责重启,过慢的找个备胎再运行一次。Executor以多线程的方式运行并将结果返回taskScheduler。

    job提交

    action隐式调用runjob提交job,DAGScheduler

    Stage调度

    Spark提供两种策略模式:FAIR和FIFO

    DAGScheduler从最后个RDD开始BFS,通过宽依赖划分Stage(找父调度阶段,而后从父调度阶段的末尾再来一次BFS。。。),

    提交调度

    通过finalStage建立调度依赖关系并通过finalStage生成Job实例,生成waitingStages列表通过submitStage依次提交Stage,若其中部分task提交失败重新提交该stage重新运行

    提交task

    依据partition个数拆分对应个数的task作为taskSet提交给taskScheduler,taskScheduler收到taskSet后生成一个taskSetManager以管理taskSet,根据设置的调度算法进行调度与资源分配(就近原则),分配好资源后把任务发送到各个Worker中由Executor执行

    执行task

    Executor收到task通过taskRunner把他放入线程池中空闲线程执行,计算结果写入BlockManager

    若task结果成功,通过blockid和getRemoteBytes(blockid)获取结果。反之若失败,将executor标记为failed,根据更新后的Executor重新调度一次

     3.调度算法

    应用程序间的调度

    有多个Driver的条件下,Master在启动的时候,将Drivers启动,尽可能分散的分配在Worker上。然后分配资源时,先分配的application会尽可能多的拿资源,后来的就在剩下的资源里挑挑拣拣/等待(FIFO)

    分配资源有两种可用策略:1.Driver尽可能分散到Worker上(内存使用较多的计算)2.Driver尽可能集中到Worker上(CPU密集型计算)

    task间的调度

    当Stage划分好,然后提交taskSet的过程中,会进入TaskSchedulerImpl#submitTasks方法,通过设定值决定FIFO调度(优先级)还是FAIR调度(饥饿度大/资源少/权重比小)。

    4.容错和HA

    Executor异常(ExecutorRunner)

    Runner捕获异常发送给Worker,Worker更新并发送给Master,Master换一个Worker启动Executor(10次),超过10次还错,此应用程序就别跑了以免占用资源

    worker异常(心跳超时)

    如果worker运行的是Executor:对于在Worker上的所有Executor,1.告诉Driver它们崩了。2.同上(Executor异常)操作

    如果worker运行的是Driver:是否需要重启?需要就分配合适的节点重启Driver,不需要就删

    master异常

    StandbyMaster将接管,恢复方法由预设策略决定

    ZOOKEEPER:zookeeper选举出新的master,通过zookeeper中保存的元数据,恢复

    FILESYSTEM:元数据持久化到本地系统中,新master获得持久化信息并恢复

    CUSTOM:用户自定义恢复方法

    NONE:不回复

  • 相关阅读:
    🔨FFmpeg 转换至 MP4 视频格式
    🔨Ubuntu Linux '门' '复' 显示不标准
    🔨Youtube-dl 开代理搭配 Aria2 多线程加速下载
    📔 如何用英语的思维来思考 How to THINK in English
    🚀 sublime 加速软件下载
    🚀 snap 代理
    🚀 Chocolatey 代理
    🔨 Deepin V20 软件及遇到的问题
    💿 npm 换源 (转载)
    🔨FFmpeg 合并视频
  • 原文地址:https://www.cnblogs.com/tillnight1996/p/12897583.html
Copyright © 2011-2022 走看看