ошибка перетасовки памяти: не удалось выделить прямую память
При выполнении пары объединений с искровыми кадрами данных (4x) я получаю следующую ошибку:
org.apache.spark.shuffle.FetchFailedException: failed to allocate 16777216 byte(s) of direct memory (used: 4294967296, max: 4294967296)
Даже при настройке:
--conf "spark.executor.extraJavaOptions-XX:MaxDirectMemorySize=4G" \
не решено.
2 ответа
Похоже, в полётных блоках слишком много. Попробуйте с меньшими значениямиspark.reducer.maxBlocksInFlightPerAddress
. Для справки взгляните на этот JIRA
Цитирующий текст:
Для конфигураций с включенным внешним перемешиванием мы заметили, что если очень большое значение no. блоков загружается с удаленного хоста, это подвергает NM дополнительному давлению и может привести к его сбою. Это изменение вводит конфигурацию spark.reducer.maxBlocksInFlightPerAddress, чтобы ограничить нет. выходов карты, полученных с данного удаленного адреса. Примененные здесь изменения применимы для обоих сценариев - когда внешнее перемешивание включено, а также отключено.
У меня была аналогичная проблема:
org.apache.spark.shuffle.FetchFailedException: failed to allocate 16777216 byte(s) of direct memory (used: 57445187584, max: 57446760448)
где57445187584
именно настроеноspark.executor.memory=54850m
.
Наша работа действительно работала с огромным объемом данных, и требовалось больше памяти.
Я обновил тип машины Dataproc сe2-highmem-8
кe2-highmem-16
и определил новую памятьspark.executor.memory=114429m
.