Spark任务调度

专业术语

       任务相关:
Application:应用程序
Job:action类算子触发执行的操作
Stage:一组任务(map task)
Task:集群运行时最小的集成单元
       任务相关:
Master:资源管理的主节点
Worker:资源管理的从节点
Executor:执行任务的进程
ThreadPool:线程池,存在于Executor中

RDD的依赖关系

窄依赖


       父RDD与子RDD中的partition之间的关系时一对一的,在这种关系下不会发生shuffle;

宽依赖


       父RDD与子RDD中的partition之间的关系时多对一的,一般来说,这种依赖都会导致shuffle;
       宽窄依赖的作用:将每一个Job切割成一个个Stage;

Job切割过程

具体过程

DAG有向无环图

具体过程

       根据RDD的宽窄依赖,将有向无环图切割成一个个的Stage。

Spark任务调度

具体过程

       首先在用户提交了一个应用后,系统会根据会生成一个类似于方框1的有向无环图。在之后的DAG Scheduler中将会根据RDD的宽窄依赖,将有向无环图切割成一个个的Stage,再将切割出来的Stage封装成TaskSet对象(Stage=TaskSet)发送给Task Scheduler。Task Scheduler会遍历每一个TaskSet对象拿到每一个Task,之后再调用HDFS上的某一个方法获取到数据的位置,一句数据的位置来分发Task到Worker节点中的Executor进程中的Thread Pool线程池中执行。
       如果Task Scheduler节点发送Task失败或者Task执行掉队,那么Task Scheduler节点就会向Worker节点重新发送失败的Task,默认重试3次;重试3次继续失败后DAG Scheduler节点会将所有失败的和掉队的Task重新封装成Task Set再继续执行,默认重试4次;

如何判断Task掉队

       使用二分法的思想,当所有的Task的75%全部执行完毕,那么每隔100ms就会计算剩余Task的执行时间的中位数,然后将中位数*1.5=时间,拿到这个最终计算出来的时间,去查看哪些Task超时,这些Task就是挣扎的Task。

附加问题

       1.如果1TB数据,单机运行执行了30分钟,但是使用Spark(4node)来计算则需要2个小时,为什么?
       原因:
1)可能发生了数据倾斜,大部分的数据给了少量的Task计算,少量的数据给了大部分的Task计算;
2)开启了推测执行机制。

       2.对于ELT类型的业务,开启推测执行、重试机制,对于最终结果会有什么影响?
ELT类型为数据清洗流程,分为Extract提取、Transform转换、Load装载,即提取数据库数据并进行转换过程后会将数据保存到一张新的表中;
       最终数据库中可能会有重复数据;
       原因:如果有Task失败或者掉队,那么Task Scheduler节点就会将任务重新发送给Worker进行执行,而已经写入数据库的数据并不会被删除;
       解决方案:关闭各种推测或者设置事务表;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值