spark中资源调度任务调度
在spark的资源调度中
1、集群启动worker向master汇报资源情况
2、Client向集群提交app,向master注册一个driver(需要多少core、memery),启动一个driver
3、Driver将当前app注册给master,(当前app需要多少资源),并请求启动对应的Executor
4、driver分发任务给Executor的Thread Pool。
根据Spark源码可以知道:
1、一个worker默认为一个Application启动一个Executor
2、启动的Executor默认占用这个worker的全部资源
3、如果要在一个worker上启动多个Executor,(前提:在内存充足的情况下)需要设置--executor-cores num 参数
宽依赖、窄依赖
窄依赖:父RDD与子RDD,partition之间是一对一的关系,或者多对一的关系。
宽依赖:父RDD与子RDD,partition之间是一对多,多对多的关系。
注意:
1、Stage的划分是根据宽窄依赖进行的,Satge与Satge之间是根据宽依赖划分的,每个Satge内部是窄依赖的。
2、窄依赖内部父RDD与子RDD之间的Partition是一对一的关系。
3、一个Satge内部是由多个RDD组成,在运行的过程中,会形成一个个并行的task,每个task形成一个pipeline。
4、在pipeline的运行过程中,数据不会落地,只有在右侧的join阶段的shuffle write才会数据落地。
Spark任务调度
Spark的任务调度过程
RDD之间有依赖关系,所以可以根据依赖关系倒推回去,寻找到RDD的所有依赖关系,形成DAG(有向无环图)
由RDD Object将DAG传递给DAGScheduler
DAGScheduler会根据宽依赖将有向无环图划分为一个个的Satge
DAGScheduler将taskSet传递给TaskScheduler(实际上taskScheduler和Stage是相同的,只是叫法不同)
TaskScheduler会将TaskSet划分为一个个的task,传递给worker
worker会将task放入反序列化放入自己的线程池中,进行执行。
注意:
默认情况下TaskScheduler会对计算失败的task重试3次
默认情况下DAGScheduler会对计算失败的Stage重试4次
一共重试3*4=12次
未避免在对数据库操作时,操作一半失败,重试导致数据重复插入问题,可以采取两个办法
(1)设置主键
(2)关闭推测执行(默认是关闭的)
特殊情况:
如果task在执行的过程中报错shuffle file not find错误信息,此时TaskScheduler是不负责重试的,直接抛出对应的Satge运行失败,由DAGScheduler负责重试,如果DAGScheduler4次重试失败,则直接显示Job运行失败。
最新文章
- Spring, MyBatis 多数据源的配置和管理
- joson返回数据库的时间格式在前台用js转换
- Analyzer报表里显示的 * 星号、红叉、#井号的意义
- SQL Server 2008 R2 Developer (x86, x64, ia64) – DVD (Chinese-Simplified)
- iOS 用代码+Xib搭建UI界面实例
- ACRush 楼天成回忆录
- Android Studio 使用genymotion 模拟器运行app时 提示找不到任何设备
- #define XBYTE ((unsigned char volatile xdata *) 0)
- stray '/241' in program 错误
- SWUST OJ(1035)
- Aforge.net识别简易数字验证码问题
- mySql的UDF是什么
- webstorm 2018.10月 License server 最新激活码
- numpy.linspace()等差数列函数
- MVC5 Entity Framework学习之实现主要的CRUD功能
- springmvc访问静态资源的springmvc.xml配置
- nuget命令的用法:
- Ubuntu 12.04 安装 vsftpd
- vue之element-ui设置全局弹出框
- ARM v8-A 系列CPU的MMU隐射分析
热门文章
- linux / centos 安装SQL Server 2017 设置默认语言与排序规则Chinese_PRC_CI_AS
- BETTER SUPPORT FOR FUNCTIONAL PROGRAMMING IN ANGULAR 2
- Java设计模式(9)——观察者模式
- thinkphp 调用wsdl接口实例化SoapClient抛出异常
- Groovy 读取json文件,并用gson反序列化为List集合
- Vivado 2017封装自定义IP Core
- Spring MVC3.2 通过Servlet3.0实现文件上传
- redis修改端口号
- 注册一个GitHub用户的过程
- jQuery限制文本框的输入长度