-
job :由一个 rdd 的 action 触发的动作,可以简单的理解为,当你需要执行一个 rdd 的 action 的时候,会生成一个 job。Job简单讲就是提交给spark的任务。
-
stage : stage 是一个 job 的组成单位,就是说,一个 job 会被切分成 1 个或 1 个以上的 stage,然后各个 stage 会按照执行顺序依次执行。简单地说Stage是每一个job处理过程要分为的几个阶段。
-
task : 即 stage 下的一个任务执行单元,一般来说,一个 rdd 有多少个 partition,就会有多少个 task,因为每一个 task 只是处理一个 partition 上的数据。Task是任务运行的最小单位。最终是要以task为单位运行在executor中。
stage的task的数量是由输入文件的切片个数来决定的。在HDFS中不大于128m的文件算一个切片(默认128m)。通过算子修改了某一个rdd的分区数量,task数量也会同步修改。
一般情况下,我们一个task运行的时候,使用一个cores,理论上:每一个stage下有多少的分区,就有多少的task,task的数量就是我们任务的最大的并行度。实际上:最大的并行度,取决于我们的application任务运行时使用的executor拥有的cores的数量。task数量超过这个cores的总数先执行cores个数量的task,然后等待cpu资源空闲后,继续执行剩下的task。
RDD,即弹性分布式数据集,全称为Resilient Distributed Dataset,是一个容错的,并行的数据结构,可以让用户显式地 将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD还提供了一组非常丰富的操作来操作这些数据,如:map,flatMap,filter等转换操作,以及SaveAsTextFile,conutByKey等行动操作。记录了该 RDD 是通过哪些 Transformation 得到的,在计算机中使用 lineage 来表示这种血缘结构,lineage 形成一个有向无环图 DAG, 整个计算过程中,将不需要将中间结果落地到 HDFS 进行容错,加入某个节点出错,则只需要通过 lineage 关系重新计算即可.
PairedRDD:(键值对分布式数据集)Spark 为包含键值对类型的 RDD 提供了一些专有的操作,称为