sparkRdd的默认分区有两大因素决定:
1.spark.default.parallelism
2.文件块的大小
spark.default.parallelism:(默认的并发数)
本地模式下spark.default.parallelism :
spark-shell 和spark-default.conf相关默认为4
spark-shell --master local[N] spark.default.parallelism = N (使用N个核)
伪集群模式下:
spark-shell --master local-cluster[x,y,z] spark.default.parallelism = x * y
x为本机上启动的executor数,
y为每个executor使用的core数,
z为每个 executor使用的内存
mesos 细粒度模式:
Mesos fine grained mode spark.default.parallelism = 8
- 1
Yarn模式stand模式:
spark.default.parallelism = max(所有executor使用的core总数, 2)
影响默认分区的因素还有spark.files.maxPartitionBytes = 128 M,分区的数量必须(文件size/12M)
在不同的文件系统中默认分区方式计算方式如下:
从本地文件读取:
rdd的分区数 = max(本地file的分片数, sc.defaultMinPartitions)
从hdfs分布式文件系统:
rdd的分区数 = max(hdfs文件的block数目, sc.defaultMinPartitions)
从HBase的数据表:
RDD的分区数为该Table的region数。
从kafka:
待续。。。。