spark的RDD分区的设定规则
目录
一、第一种:parallelize 获取rdd时
二、第二种:通过外部读取数据-textFile
三、上面提到了默认分区数,那么默认分区是怎么计算呢?
一、第一种:parallelize 获取rdd时
- 没有指定:spark.default.parallelism参数值决定
- 指定分区:指定几个,就是几个分区
总结:假如指定了分区数,分区数就是这个,假如没有指定spark.default.parallelism。
二、第二种:通过外部读取数据-textFile
- 没有指定:spark.default.parallelism和2取最小值,
具体计算并行度的公式:min(spark.default.parallelism,2)
- 指定分区:最小分区数,最少有这么多分区,具体的分区数可以根据HDFS分片规则来 hdfs ( 一片是128M或者128*1.1 = 140.8M)
rdd3 = sc.textFile("hdfs://bigdata01:9820/datas/wordcount/data.txt", minPartitions=2)
假如你这个data.txt = 500M ,此时的分区数是:4 因为 500 = 128+ 128+ 128+ 116
三、上面提到了默认分区数,那么默认分区是怎么计算呢?
- local模式
默认并行度取决于本地机器的核数,即:
- local: 没有指定CPU核数,则所有计算都运行在一个线程当中,没有任何并行计算
- local[K]:指定使用K个Core来运行计算,比如local[2]就是运行2个Core来执行
- local[*]: 自动帮你按照CPU的核数来设置线程数。比如CPU有4核,Spark帮你自动设置4个线程计算
- 集群模式
集群模式包含Stanalone、Yarn模式,Mesos的默认并行度为8
默认并行度取决于所有executor上的总核数与2的最大值,比如集群模式的设置如下:
--num-executors 5
--executor-cores 2
上面配置Executor的数量为5,每个Executor的CPU Core数量为2,
executor上的总核数10,则默认并行度为Max(10,2)=10。