Недавно мы обновили метку выпуска EMR с emr-5.16.0 до emr-5.20.0, в которой вместо 2.3.1 используется Spark 2.4.
Сначала это было ужасно.Джобс начал брать гораздо больше, чем раньше.Наконец, мы устанавливаем для MaximumResourcesAllocation значение true (возможно, оно было истинным по умолчанию в emr-5.16), и все начинает выглядеть лучше.Но некоторые этапы все еще занимают гораздо больше, чем раньше (в то время как другие - меньше).Например: Spark 2.4:
Spark 2.3.1:
Изображения из истории приложений.
В Spark 2.4 операция keyBy заняла в 10 раз больше, чем в Spark 2.3.1.
Она связана с количеством разделов.В версии 2.3.1 число разделов RDD после операции mapToPair составляло 5580, тогда как в Spark 2.4 был параллелизм кластера по умолчанию (128, потому что он работал в кластере с 64 ядрами).
Iпопытался перераспределить на 10000, и этап keyBy закончился всего за 1,2 минуты.Но я думаю, что это не хорошее и не окончательное решение.
Это известная проблема?Стоит ли пытаться установить параллелизм по умолчанию на большее количество?