1

Я выполняю задание Dataproc с использованием h1-highmem-16 машин, каждый из которых имеет 104 ГБ памяти.YARN не использует всю память, доступную в экземпляре Google Dataproc

Я дважды проверял размер экземпляров в Google Консоли, и все работники и мастер действительно h1-highmem-16.

Тем не менее, я получаю эту ошибку:

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

Почему ПРЯЖА не использует все 104 ГБ оперативной памяти?

ответ

4

Dataproc настраивает параметры памяти, чтобы они соответствовали 2 исполнителям Spark на машину, поэтому каждый контейнер должен быть в два раза меньше емкости каждого NodeManager.

Вы можете опционально переопределить spark.executor.memory и, возможно, spark.yarn.executor.memoryOverhead вместе с spark.executor.cores, чтобы изменить, как вы хотите упаковать исполнителей на каждую машину. spark.executor.cores будет по умолчанию использовать половину ядер машины, так как половина каждой машины будет предоставлена ​​каждому исполнителю. В вашем случае это означает, что каждый исполнитель Spark пытается запустить 8 задач параллельно в одном и том же процессе.

Вы можете эффективно увеличить память за одну задачу, уменьшив количество ядер-исполнителей, но сохраняя все остальное одинаково, например, spark.executor.cores=6 увеличит память каждой задачи на 33%, даже если вы оставите все остальное одинаковым. Они могут быть указаны на момент подачи заявки:

gcloud dataproc jobs submit spark --properties spark.executor.cores=6 
+0

Уменьшение количества обработанных сердечников, спасибо. Я попытался сменить память исполнителя и память накладные расходы без каких-либо успехов, он всегда использовал несколько гигабайт больше предела. – cahen

Смежные вопросы