По умолчанию YARN планирует только контейнеры (в данном случае искры-исполнители), основываясь на памяти, а не на количестве запрашиваемых ядер. Dataproc устанавливает память исполнителя так, чтобы на каждый узел приходилось 2 исполнителя.
spark.executor.cores
по существу игнорируется в контексте YARN, но - это , используемый для определения количества параллельных задач. Если вы уменьшаете spark.executor.cores
, но не память исполнителя, вы фактически уменьшаете параллелизм!
Вместо этого вы должны оставить память исполнителя и увеличить spark.executor.cores
. На n1-standard-4 вы сможете без проблем повысить spark.executor.cores
с 2 до 4.
Если вы попытаетесь установить spark.executor.cores
выше, чем число YARN vcores на узле, Spark будет жаловаться. Вы можете исправить это, установив yarn.nodemanager.resource.cpu-vcores=<large-number>
. Тогда <large-number>
будет новой верхней границей.
В зависимости от того, насколько ограничен ввод / вывод для вашей работы, вы можете легко удвоить или увеличить в четыре раза spark.executor.cores
, если не больше. Запись файлов в GCS обычно связана с вводом / выводом.
Обратите внимание, что, хотя вы можете указать свойства spark при запуске задания spark, вы сможете указать это свойство YARN только при создании кластера: