Контейнер уничтожен YARN за превышение пределов памяти - PullRequest
0 голосов
/ 29 мая 2018

Я создаю кластер в Google DataCroc со следующими характеристиками:

Master Standard (1 master, N workers)
  Machine       n1-highmem-2 (2 vCPU, 13.0 GB memory)
  Primary disk  250 GB

Worker nodes    2
  Machine type  n1-highmem-2 (2 vCPU, 13.0 GB memory)
  Primary disk  size    250 GB

Я также добавляю в Initialization actions файл .sh из этого репозитория , чтобыиспользуйте цеппелин.

Код, который я использую, отлично работает с некоторыми данными, но если я использую большее количество, я получаю следующую ошибку:

Container killed by YARN for exceeding memory limits. 4.0 GB of 4 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.

Я видел такие сообщения: Контейнер уничтожен YARN за превышение памяти ... , где рекомендуется изменить yarn.nodemanager.vmem-check-enabled на false.

Я немного смущен, хотя.Все эти конфигурации происходят, когда я инициализирую кластер или нет?

Кроме того, где именно находится yarn-site.xml?Я не могу найти его в мастере (не могу найти его в /usr/lib/zeppelin/conf/, /usr/lib/spark/conf, /usr/lib/hadoop-yar/), чтобы изменить его, и если он изменился, что мне нужно для «перезагрузки»?

1 Ответ

0 голосов
/ 30 мая 2018

Игорь прав, проще всего создать кластер и указать любые дополнительные свойства для установки перед запуском сервисов.

Однако немного страшно полностью отключить YARN, проверяя, что контейнеры остаются в пределах ихграницы.В любом случае вашей виртуальной машине в конечном итоге не хватит памяти.

Сообщение об ошибке верное - попробуйте увеличить spark.yarn.executor.memoryOverhead.По умолчанию max(384m, 0.1 * spark.executor.memory).На n1-highmem-2 это заканчивается 384 м с spark.executor.memory=3712m.Вы можете установить это значение при создании кластера, используя --properties spark:spark.yarn.executor.memoryOverhead=512m.

Если я правильно понимаю, JVM и Spark стараются сохранять разумное использование памяти в пределах spark.executor.memory - memoryOverhead.Однако интерпретатор python (где фактически выполняется код вашего pyspark) находится за пределами их учета и вместо этого попадает под memoryOverhead.Если вы используете много памяти в процессе Python, вам нужно увеличить memoryOverhead.

Вот некоторые ресурсы по pyspark и управлению памятью Spark:

...