我们已经将aws emr从5.16更新到5.20(使用spark 2.4而不是2.3.1)。 我们注意到有些工作需要更长的时间。 这似乎与RDD上的并行性级别有关。 在AWS Emr上运行此代码时:
JavaPairRDD<String, T> result =
keyBy(baseRDD.repartition(1000), keyGetter)
.mapValues(t -> function1(t));
keyBy操作执行1000个任务,但是mapValues使用集群的默认并行性,而在AWS Emr 5.16中,相同的代码使用先前RDD(1000)的继承并行性。 由keyBy操作(getNumPartitions())导致的RDD分区数的确是默认的并行级别。
我们无法确定这是在spark还是aws-emr上发生了变化,还是某种错误,但它在很大程度上影响了性能。