spark中job、stage、task、partition、executor概念理解以及分区数深入探究

概念

1. job定义:

       我们都知道,在spark rdd中,有action、transform操作,当真正触发action时,才真正执行计算,此时产生一个job任务。

2. stage定义:

       以shuffle为界,当在一个job任务中涉及shuffle操作时,会进行stage划分,产生一个或多个stage。

3. task定义:

      一个stage可能包含一个或者多个task任务,task任务与partition、executor息息相关,即并行度。

4. partition定义:

     partition个数即rdd的分区数,不同的数据源读进来的数据分区数默认不同,可以通过repartition进行重分区操作。

5. executor定义:

     executor运行在work上,一个work可以运行一个或多个executor,一个executor可以运行一个或者多个task(取决于executor的core个数,默认是一个task占用一个core,即有多少个core就可以启动多少个task任务)

6. 各个之间的关系图:

spark中job、stage、task、partition、executor概念理解以及分区数深入探究_第1张图片

  1. 一个work有一个或多个executor
  2. 一个executor有一个或者多个task(取决于executor的core个数)
  3. 一个task对应一个partition分区,即并行度(官网推荐partition分区数设置是task个数的2~3倍,充分利用资源)
  4. 一个stage有一个或多个task任务
  5. 一个job有一个或多个stage

 

深入partition分区数

1. 通过scala 集合方式parallelize生成rdd

val rdd = sc.parallelize(1 to 10)

这种方式下,如果在parallelize操作时没有指定分区数,
则rdd的分区数 = sc.defaultParallelism (spark.default.parallelism = 10(默认的并发数))

2. 通过textFile方式生成的rdd

val rdd = sc.textFile(“path/file”)

     有两种情况:

     a、从本地文件file:///生成的rdd,操作时如果没有指定分区数,则默认分区数规则为:

             rdd的分区数 = max(本地file的分片数, sc.defaultMinPartitions)

      b、从hdfs分布式文件系统hdfs://生成的rdd,操作时如果没有指定分区数,则默认分区数规则为:

             rdd的分区数 = max(hdfs文件的block数目, sc.defaultMinPartitions)

3. 从HBase的数据表转换为RDD,则该RDD的分区数为该Table的region数

4. Spark Streaming获取Kafka消息对应的分区数

方式一:基于Receiver接收数据
         1.topic的分区数与rdd分区数无关
         2.topic有多少个分区,就有多少个receiver接收
         3.rdd分区数与数据存储在hdfs的wal文件的block数相关
方式二:基于Direct接收数据
         spark中rdd的分区数与topic分区数一一对应

 

附带相关链接:

     https://www.cnblogs.com/wzj4858/p/8204411.html

 

 

你可能感兴趣的:(spark)