[大数据]连载No9之SparkCore核心篇-资源调度
2018-02-21 13:32
411 查看
本次总结见目录
stage切割规则
1:每一个stage的并行度由task个数决定,task由partition个数决定,partitio由数据大小决定,或者说,stage并行度由最后一个RDD的partiton决定
2:每个task的处理逻辑就是每条线贯穿的Stage的所有的partition的处理逻辑,以递归函数的展开式整合起来的
见图
Spark任务调度流程
代码:
1)var conf = new SparkConf()
2)var sc = new SparkContext(conf)
3)var rddLine = sc.textFile("log")
4)var filterRDD=rddLile.filter()
5)var mapRdd=filterRDD.map()
6)mapRDD.count()
7)sc.stop()
说明:
1:当Worker节点启动后,会向maser节点注册其本身,并告诉maser其在当前节点管理多少资源
2:Worker会像master每隔3秒发送一次心跳,但不会携带当前资源情况
3:通过spark-sbumit提交jar,在执行第二步后,会创建SparkSontext对象同时,会创建 DGAScheduler和TaskSchedure对象
4:TaskSchedure创建成功后,向master申请资源,未指定选项,使用默认值
--executor-memory :1G
--executor-cores:没有默认值,每一个Worker管理的所有core数量
--total-executor-cores:Int的最大值 (当前APPlication总共 使用多少core)
5:Master收到请求后, 根据自己管理的资源情况, 通知资源充足的Worker,并在其节点上启动Executor进程
6:每一个executor启动成功,将其反向注册给TaskScheduler,TaskScheduler就拥有了一批Executor地址了
7:执行完第六步后,集群开始触发(遇到Action算子)Job执行,DAGSchedule会根据RDD的宽窄依赖,来切割这个RDD,划分Stage,切割完毕后,DAGscheduler会将这个stage中的所有task封装到TaskSet对象中,然后"发送"给TaskScheduler
8:TaskSchelduer收到到每一个TaskSet对象后,都会遍历这个TaskSet集合,将集合中的每一个task异步发送到Executor中执行,如果task失败,默认重试三次
粗粒度的资源调度(spark)
解释:当application执行之前,会将所有的资源(Executor)申请完毕,知道资源完毕后,才会进行任务调度,知道最后一个task执行完毕,才释放掉这部分资源
优点:每一个task执行不需要申请资源,直接去用,而且另外一个task能复用资源,task时间短了,stage时间就短了,job时间也就短了,
缺点:知道最后一个task执行完毕才释放资源,集群资源不能充分利用
细粒度的资源调度(mapReduce)
解释:在application执行前不需要讲资源申请完毕,而是直接进行任务的调度,每一个task在执行前自己去申请资源,申请到了才执行,每一个task执行完毕,会将自己申请的资源释放掉
缺点:task时间变长了
提交application两种方式(client,cluster)
client(适合测试环境):Dirver进程在client端启动,我们就能够看到task的执行情况
cluster(适合生产环境):Dirver进程在集群中随机选择一台Worker节点启动,就能将网卡流量集中的问题,散布到集群各个节点,变为(--deploy-mode cluster)
命令: spark-submit --master spark://master:7077 --deploy-mode cluster --class com.sxt.FilterCountOperator ./01-spark.jar
Driver进程与spark集群的通信
1:申请资源
2:executor启动完毕,反向注册给Driver
3:Driver分发task
4:Executor进程与Driver进程心跳机制
stage切割规则
1:每一个stage的并行度由task个数决定,task由partition个数决定,partitio由数据大小决定,或者说,stage并行度由最后一个RDD的partiton决定
2:每个task的处理逻辑就是每条线贯穿的Stage的所有的partition的处理逻辑,以递归函数的展开式整合起来的
见图
Spark任务调度流程
代码:
1)var conf = new SparkConf()
2)var sc = new SparkContext(conf)
3)var rddLine = sc.textFile("log")
4)var filterRDD=rddLile.filter()
5)var mapRdd=filterRDD.map()
6)mapRDD.count()
7)sc.stop()
说明:
1:当Worker节点启动后,会向maser节点注册其本身,并告诉maser其在当前节点管理多少资源
2:Worker会像master每隔3秒发送一次心跳,但不会携带当前资源情况
3:通过spark-sbumit提交jar,在执行第二步后,会创建SparkSontext对象同时,会创建 DGAScheduler和TaskSchedure对象
4:TaskSchedure创建成功后,向master申请资源,未指定选项,使用默认值
--executor-memory :1G
--executor-cores:没有默认值,每一个Worker管理的所有core数量
--total-executor-cores:Int的最大值 (当前APPlication总共 使用多少core)
5:Master收到请求后, 根据自己管理的资源情况, 通知资源充足的Worker,并在其节点上启动Executor进程
6:每一个executor启动成功,将其反向注册给TaskScheduler,TaskScheduler就拥有了一批Executor地址了
7:执行完第六步后,集群开始触发(遇到Action算子)Job执行,DAGSchedule会根据RDD的宽窄依赖,来切割这个RDD,划分Stage,切割完毕后,DAGscheduler会将这个stage中的所有task封装到TaskSet对象中,然后"发送"给TaskScheduler
8:TaskSchelduer收到到每一个TaskSet对象后,都会遍历这个TaskSet集合,将集合中的每一个task异步发送到Executor中执行,如果task失败,默认重试三次
粗粒度的资源调度(spark)
解释:当application执行之前,会将所有的资源(Executor)申请完毕,知道资源完毕后,才会进行任务调度,知道最后一个task执行完毕,才释放掉这部分资源
优点:每一个task执行不需要申请资源,直接去用,而且另外一个task能复用资源,task时间短了,stage时间就短了,job时间也就短了,
缺点:知道最后一个task执行完毕才释放资源,集群资源不能充分利用
细粒度的资源调度(mapReduce)
解释:在application执行前不需要讲资源申请完毕,而是直接进行任务的调度,每一个task在执行前自己去申请资源,申请到了才执行,每一个task执行完毕,会将自己申请的资源释放掉
缺点:task时间变长了
提交application两种方式(client,cluster)
client(适合测试环境):Dirver进程在client端启动,我们就能够看到task的执行情况
cluster(适合生产环境):Dirver进程在集群中随机选择一台Worker节点启动,就能将网卡流量集中的问题,散布到集群各个节点,变为(--deploy-mode cluster)
命令: spark-submit --master spark://master:7077 --deploy-mode cluster --class com.sxt.FilterCountOperator ./01-spark.jar
Driver进程与spark集群的通信
1:申请资源
2:executor启动完毕,反向注册给Driver
3:Driver分发task
4:Executor进程与Driver进程心跳机制
相关文章推荐
- [大数据]连载No8之Spark(集群客户端+控制类算子+广播变量+任务调度)
- 大数据:Spark Core(二)Driver上的Task的生成、分配、调度
- 大数据:Spark Core(二)Driver上的Task的生成、分配、调度
- Spark Core 资源调度与任务调度(standalone client 流程描述)
- 大数据:Spark Core(二)Driver上的Task的生成、分配、调度
- [大数据]连载No11之SparkCore之WebUI + 自定义分区器
- [大数据]连载No6之Spark(RDD特性,算子)+第一行代码Hello WordCount
- 大数据IMF传奇行动绝密课程第31课:Spark资源调度分配内幕天机彻底解密
- Spark Core_资源调度与任务调度详述
- 大数据:Spark Standalone 集群调度(二)如何创建、分配Executors的资源
- 深入理解Spark 2.1 Core (六):资源调度的原理与源码分析
- [大数据]连载No5之Scala(特性,数据类型,类,集合,函数)
- Spark系列(七)Master中的资源调度
- spark学习笔记(3)spark核心数据结构RDD
- Spark核心数据模型RDD及操作
- SparkCore解析json数据fastjson
- Spark集群资源调度
- Spark大数据处理 之 从WordCount看Spark大数据处理的核心机制(1)
- 大数据:Spark Core(三)Executor上是如何launch task
- [大数据]连载No10之Spark算子计算by java