Reduce端并行度
- RDD:
- 参数:spark.default.parallelism
- 手动:groupByKey(10),10即为并行度
- Spark SQL:
- 参数:spark.sql.shuffle.partitions
- Hive on Spark:
Map端加载数据的并行度
- textFile等算子加载数据源,如果指定了minPartitions,如果最终切分的split数据大小小于blockSize,则会使用该大小进行最终切分,也就是切出来比blockSize更小的split,相当于增加了并行度。
- hive on spark:开启合并小文件后,并行度降低。
主动调整分区数量
使用重分区算子:repartition()或者coalesce()
官方推荐,根据应用分配的CPU的情况,分区数量可以为CPU核数的2~3倍。
/** repartition */
val rdd2: RDD[Int] = rdd1.repartition(4)
println("Repartition size:" + rdd2.partitions.size)
//保存
rdd2.saveAsTextFile("data/output/re-partition")
/** coalesce分区算子*/
val rdd3: RDD[Int] = rdd1.coalesce(4)
println("Repartition size:" + rdd3.partitions.size)
//保存
rdd3.saveAsTextFile("data/output/coalesce")