并行度可以通过如下三种方式来设置,可以根据实际的内存、CPU、数据以及应用程序逻辑的情况调整并行度参数,增加任务的并行度,充分利用集群机器的计算能力,一般并行度设置为集群CPU总和的2-3倍。
1 在会产生shuffle的操作函数内设置并行度参数,优先级最高
1.1 testRDD.groupByKey(24)
1.2 val rdd2 = rdd1.reduceByKey(+ ,10)
val rdd3 = rdd2.map.filter.reduceByKey(+)
1.3 重分区
coalesce和repartition都是对RDD进行重新分区。coalesce操作使用HashPartitioner进行重分区,第一个参数为重分区的数目,第二个为是否shuffle,默认情况为false。repartition操作是coalesce函数第二个参数为true的实现。如果分区的数目大于原来的分区数,那么必须指定shuffle参数为true,否则分区数不变。
rdd.coalesce(4,true);
rdd.repartition(5);
2 代码中配置“spark.default.parallelism”设并行度,优先级次之
val conf = new SparkConf()
conf.set(“spark.default.parallelism”, 24)
3 在 “$SPARK_HOME/conf/spark-defaults.conf” 文件中配置“spark.default.parallelism”的值,优先级最低
spark.default.parallelism 24