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

本文介绍了Spark任务提交的standalone和Yarn两种模式,详细阐述了这两种模式下Driver和ApplicationMaster的角色以及资源和任务调度的过程。在standalone模式中,Driver负责发送task、监控执行和资源申请。而在Yarn模式,ApplicationMaster承担类似职责,同时ResourceManager进行资源分配。文章还讨论了资源调度和任务调度的细节,包括Stage划分、Task执行和推测执行策略。
摘要由CSDN通过智能技术生成

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)推测执行是否开启
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值