Ответ 1
Я бы попытался увеличить память до spark.python.worker.memory
умолчанию для spark.python.worker.memory
(512 м) из-за тяжелого кода Python, и это значение свойства не учитывается в spark.executor.memory
.
Объем памяти, который будет использоваться каждым рабочим процессом Python во время агрегации, в том же формате, что и строки памяти JVM (например, 512m, 2g). Если объем памяти, используемой во время агрегации, превысит этот объем, данные будут разбросаны по дискам. ссылка на сайт
ExecutorMemoryOverhead расчета в Spark:
MEMORY_OVERHEAD_FRACTION = 0.10
MEMORY_OVERHEAD_MINIMUM = 384
val executorMemoryOverhead =
max(MEMORY_OVERHEAD_FRACTION * ${spark.executor.memory}, MEMORY_OVERHEAD_MINIMUM))
Свойство является spark.{yarn|mesos}.executor.memoryOverhead
для YARN и Mesos.
YARN убивает процессы, которые занимают больше памяти, чем они запрашивали, что является суммой executorMemoryOverhead
и executorMemory
.
В данном изображении процессы Python в работнике используют
spark.python.worker.memory
, а затемspark.yarn.executor.memoryOverhead
+spark.executor.memory
является специфической JVM.
Дополнительный ресурс почтовой рассылки Apache