Scala任务调度+资源调度

Scala任务调度+资源调度

  • 以Client方式提交Application
    • 具体流程
  • 资源调度分类
    • 粗粒度资源调度
    • 细粒度资源调度

以Client方式提交Application

具体流程

Scala任务调度+资源调度_第1张图片
       1)先启动Spark集群,启动成功后所有Worker节点就会向Master节点心跳反馈,而Master节点中的Workers集合也会储存worker地址信息及资源信息;
       2)用户提交Application,通过执行提交的Application启动Driver进程,Driver进程包含DAGScheduler对象和TaskScheduler对象;
       3)当DAGScheduler对象和TaskScheduler对象创建完成后,会向Master为Application申请资源;
       4)Master节点会向WaitingApps集合中添加新元素并且调用schedule()方法,schedule()方法会根据集群的资源情况找到合适的Worker节点启动Executor进程(默认情况下,每一个Worker节点会为当前Application启动一个Executor进程,该Executor进程会使用1GB内存和该Worker节点管理的所有Core核心数);
       5)当Executor启动成功后,会向TaskScheduler,这时TaskScheduler对象就会有Executor的信息;
       6)DAGScheduler会根据RDD的宽窄依赖,将Job划分成一个个Stage,每一个Stage由一组Task组成,每一个Task都是PipeLine计算模式;
       7)TaskScheduler会根据数据调用HDFS的API拿到数据的Block块以及位置;
       8)TaskScheduler会根据数据位置分发Task并监控Task的执行情况;(如果Task失败或者挣扎,会重试发送失败的Task;

资源调度分类

粗粒度资源调度

       描述:在Task执行之前就已经将资源申请完毕,当所有的Task执行完毕时,所用的资源才会被释放;
       优点:不需要Task自己去申请资源,而是直接去使用已经申请到的资源,从而Task启动时间大大缩短,从而提高任务执行效率;
       缺点:所有的Task执行完毕才会释放所占用的资源,若整个Application中有一个Waiting Task,那么资源就不会释放,集群的资源就无法充分利用;
       典型代表:Spark

细粒度资源调度

       描述:Application提交之后,每一个Task自己去申请资源,申请到资源才会开始执行,执行完毕后立即释放资源;
       优点:执行前申请资源,执行完毕后释放资源,有利于集群资源利用;
       缺点:所有的Task都需要自己去申请资源,这样每个Task都要有申请资源的时间,从而Application的执行效率降低;
       典型代表:Map/Reduce

你可能感兴趣的:(Scala任务调度+资源调度)