spark提交任务的模式—— standalone模式与yarn模式、资源调度与任务调度

版权声明:本文为博主原创文章,欢迎一起学习交流。 https://blog.csdn.net/ym01213/article/details/85255442

standalone模式

  1. 在客户端提交Application,Driver在客户端启动;
  2. 客户端向Master申请资源,Master返回Worker节点;
  3. Driver向Worker节点发送task,监控task执行,回收结果。

  1. 在客户端提交Application,客户端向Master申请启动Driver;
  2. Master随机在一台Worker中启动Driver;
  3. Driver启动后,向Master申请资源,Master返回资源;
  4. Driver发送task,监控task执行,回收结果。

综上,Driver的功能:

  1. 发送task;
  2. 监控task;
  3. 申请资源;
  4. 回收结果。

Yarn模式

Yarn与Standalone是平级关系,各自相互独立。

修改spark-env.sh.template为spark-env.sh,添加export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop,使得spark找到yarn所需配置。

  1. 在客户端提交Application,Driver在客户端启动;
  2. 客户端向ResourceManager申请启动ApplicationMaster(Driver);
  3. ResourceManager收到请求后,随机在一台NodeManager节点上启动ApplicationMaster;
  4. ApplicationMaster启动后,向ResourceManager申请资源,用于启动Excutor;
  5. ResourceManager收到请求后,返回给ApplicationMaster一批NodeManager节点;
  6. ApplicationMaster连接NodeManager,启动Excutor;
  7. Excutor启动后,反向注册给ApplicationMaster(Driver);
  8. ApplicationMaster(Driver)发送task,监控task,回收结果。

  1. 在客户端提交Application,客户端向ResourceManager申请启动ApplicationMaster;
  2. ResourceManager收到请求后,随机在一台NodeManager节点上启动ApplicationMaster(Driver);
  3. ApplicationMaster启动后,向ResourceManager申请资源,用于启动Excutor;
  4. ResourceManager收到请求后,返回给ApplicationMaster一批NodeManager节点;
  5. ApplicationMaster连接NodeManager,启动Excutor;
  6. Excutor启动后,反向注册给ApplicationMaster(Driver);
  7. ApplicationMaster(Driver)发送task,监控task,回收结果。

综上,ApplicationMaster(Driver)的功能:

  1. 申请资源;
  2. 启动Excutor;
  3. 任务调度。

资源调度与任务调度

资源调度:

  1. 启动集群,Worker向Master汇报资源,Master掌握了集群资源;
  2. 当new SparkContext时,创建两个对象DAGScheduler和TaskScheduler;
  3. TaskScheduler向Master申请资源;
  4. Master收到请求后,找到满足资源的Worker,启动Excutor;
  5. Excutor启动后,反向注册给TaskScheduler,Driver掌握了一批计算资源;

务调度(接资源调度后):

  1. Application中有一个action算子就有一个Job,Job中有RDD,RDD会形成DAG有向无环图;
  2. DAGScheduler负责将每个Job中的DAG按照宽窄依赖切割成stage,将stage以TaskSet形式提交给TaskScheduler;
  3. TaskScheduler负责遍历TaskSet,拿到一个个task,将task发送到Excutor中的ThreadPool中执行;
  4. TaskScheduler监控task执行,回收结果;

综上:

  1. TaskScheduler可以重试发送失败的task3次,如果依然失败,由DAGScheduler重试stage,重试4次,如果依然失败,则job失败,Application失败;
  2. TaskScheduler不仅可以重试失败的task,而且可以重试执行缓慢的task,这是Spark中的推测执行机制,默认关闭,对于ETL业务场景要关闭;
  3. 如果遇到Application一直执行不完,考虑1)数据倾斜问题;2)推测执行是否开启

猜你喜欢

转载自blog.csdn.net/ym01213/article/details/85255442