Spark复习之一

如何理解Spark中的血统概念(RDD)

简述Spark的宽窄依赖

RDD 只支持粗粒度转换,即在大量记录上执行的单个操作。将创建 RDD 的一系列 Lineage

(血统)记录下来,以便恢复丢失的分区。RDD 的 Lineage 会记录 RDD 的元数据信息和转

换行为,当该 RDD 的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的

数据分区。

RDD在Lineage依赖方面分为两种Narrow Dependencies与Wide Dependencies用来解决数

据容错时的高效性以及划分任务时候起到重要作用。

窄依赖表示每一个父(上游)RDD 的 Partition 最多被子(下游)RDD 的一个 Partition 使用;

宽依赖表示同一个父(上游)RDD 的 Partition 被多个子(下游)RDD 的 Partition 依赖,

会引起 Shuffle。

Spark如何划分stage,每个stage又根据什么决定task个数?

一个spark应用程序包括job,stage,task

job是以action方法为界,遇到一个action方法则触发一个job;

stage是job的子集,以RDD宽依赖为界,遇到shuffle做一次划分

task是stage的子集,以并行度来衡量,分区数是多少,则有多少个task

Spark的任务调度是从DAG切割开始,主要是由DAGScheduler来完成.当遇到一个Aciton操作后就会触发一个Job的计算,SparkContext将Job交给DAGScheduler提交,它会根据RDD的血缘关系构成的DAG进行切分,将一个Job划分为若干个Stages,具体划分策略是,由最终的RDD不断通过依赖回溯判断父依赖是否是宽依赖,即以Shuffle为界,划分Stage,窄依赖的RDD之间被划分到同一个Stage中,可以进行pipeline式的计算.划分的Stages分两类,一类叫做ResultStage,为DAG最下游的Stage,由Action方法决定,另一类叫做ShuffleMapStage,为下游Stage准备数据.

Stage提交时会将Task信息序列化并被打包成TaskSet交给TaskScheduler,一个Partition对应一个Task.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值