Spark Job Stage Task

在传统的批式处理中,Job和Stage是由业务逻辑决定的(action/transformation算子的使用;RDD之间宽依赖和窄依赖的转换),而Task的划分相对复杂,如果是涉及到并行度的问题,确实有点绕。


每个slave可以起一个或多个Executor;每个Executor由若干Core组成,每个Executor的每个Core一次只能执行一个Task;每个Task的执行结果就是目标RDD的partition

如果我们对并行度的定义是某一个时间点有多少Task在跑,即#Core的数目

Task被执行的并行度 = #Executor数目 * 每个Executor的核数

还有一种对于并行度的理解就是Map端和Reduce端的RDD的分片partition的个数

RDD之间的依赖关系可以分为宽依赖(shuffule/wide)和窄依赖(narrow),窄依赖是指map/union/filter这些操作,经过这些操作,当前RDD的分片数目和parent RDD的数目是一一对应的;而宽依赖发生在shuffle阶段,当前RDD的每个分片不止依赖于一个parent RDD的分片,RDD的分片数发生了变化


Map端的RDD根据窄依赖一直往前溯源可以到从HDFS读入,Map端的并行度就是HDFS读入的并行度

Spark的文件输入可以从HDFS中读入,如果是一个文件会在HDFS中被存成很多Block;当Spark读入HDFS的文件作为输入时,会根据InputFormat进行解析,将几个Block合并成一个输入分片,称为InputSplit,InputSplit不能跨文件形成,InputSplit和Task是一一对应的

而Reduce端的并行度,按下图决定:


你可能感兴趣的:(Spark Job Stage Task)