Я развертываю задание обработки данных Spark в кластере EC2, задание для кластера мало (16 ядер с общим объемом 120 ГБ), у самого большого RDD всего 76k + строк. Но сильно перекошен в середине (таким образом, требуется перераспределение), и каждая строка имеет около 100 тыс. Данных после сериализации. Работа всегда застряла в переделке. А именно, задание будет постоянно получать следующие ошибки и повторять:
org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle
org.apache.spark.shuffle.FetchFailedException: Error in opening FileSegmentManagedBuffer
org.apache.spark.shuffle.FetchFailedException: java.io.FileNotFoundException: /tmp/spark-...
Я попытался определить проблему, но, похоже, как память, так и дисковое потребление машины, бросающей эти ошибки, составляют менее 50%. Я также пробовал разные конфигурации, в том числе:
let driver/executor memory use 60% of total memory.
let netty to priortize JVM shuffling buffer.
increase shuffling streaming buffer to 128m.
use KryoSerializer and max out all buffers
increase shuffling memoryFraction to 0.4
Но никто из них не работает. Небольшое задание всегда вызывает ту же последовательность ошибок и максимальное количество попыток (до 1000 раз). Как устранить эту проблему в такой ситуации?
Спасибо, если у вас есть какие-либо подсказки.