整理spark中的job stage task几个概念以及运行案例
Job :
是一个比task 和 stage 更大的逻辑概念,job 可以认为是我们在driver 或是通过spark-submit 提交的程序中一个action ,在我们的程序中有很多action 所有也就对应很多的jobs
Stage:
是spark 中一个非常重要的概念 ,在一个job 中划分stage 的一个重要依据是否有shuflle 发生 ,也就是是否会发生数据的重组 (重新组织数据)。在一个stage 内部会有很多的task 被执行,在同一个stage 中 所有的task 结束后才能根据DAG 依赖执行下一个stage 中的task.
在spark streaming中,一个application可以在时间维度上划分为无数个job, 一个job 有很多任务组成,每组任务可以任务是一个stage , 而Task 是spark 中另一个很重要的概念 ,
task 跟 partition block 等概念紧密相连 ,task 是执行job 的逻辑单元 ,在task 会在每个executor 中的cpu core 中执行
下面是一个基于streaming实时计算的wordcount案例:
1. 首先基于yarn-cluster的模式 提交一个wordcount application
2. 在sparkcontext配置中 Durations.seconds(1) 设置为1秒,因此相隔1秒的时间段内的RDD数据 作为计算对象 来触发一个action,也就是一个job
3. 在id 为4988的job中,根据wordcount的逻辑主要有两个stage
4. 点击id为9977的 stage 即对应的foreach stage中,可以看到 该stage 由N个task来实际执行计算任务