Spark 通用问题
任务提交流程
- 用户创建Spark程序并提交
- 每个action会生成一个job,包含了一系列的RDD和对其如何进行操作的transformation
- 每个job生成一个DAG(有向无环图)
- DAGScheduler根据宽依赖对DAG进行划分stage并生成task组(一个stage对应一组task,一个partition对应一个task)
- Spark集群在worker上以一组Task为单位进行执行计算

image.png
宽窄依赖

image.png
- 窄依赖: 一个父RDD的 partition 至多被子 RDD 某个partition 使用一次 (union, map,filter)
- 宽依赖: 一个父RDD 的partition会被子RDD的partition使用多次,有 shuffle ,遇到shuffle,stage会被拆分
Spark中产生宽窄依赖的依据为是否会产生shuffle,当发生shuffle时,会产生宽依赖,基本上shuffle算子都会产生宽依赖,但是join除外,在执行join算子之前如果先执行groupByKey,执行groupByKey之后,会把相同的key分到同一个分区,再执行join算子,join算子是把key相同的进行join(只是对于k v形式的数据可以使用),不一定会产生shuffle