ошибка перетасовки памяти: не удалось выделить прямую память

При выполнении пары объединений с искровыми кадрами данных (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.

Другие вопросы по тегам