GCP Dataproc - Несогласованные метрики контейнера - пользовательский интерфейс YARN и пользовательский интерфейс Spark
У меня есть кластер GCP Dataproc с 50 рабочими (n1-standard-16 16 VCores 64 ГБ ОЗУ).
Кластер имеет планировщик емкости с калькулятором ресурсов по умолчанию.
Моя работа Spark имеет следующую конфигурацию
- spark.executor.cores = 5
- spark.executor.memory = 18G
- spark.yarn.executor.memoryOverhead = 2G
Теперь, когда я вижу пользовательский интерфейс YARN, он показывает, что каждый узел имеет 2 контейнера, работающих с 1-Vcore и 20 ГБ ОЗУ, что почти делает его похожим на это spark.executor.cores
не получает применяется. Для перекрестной проверки я посмотрел на Spark UI и, к моему удивлению, каждый исполнитель показал 5 ядер. Это немного смущает меня.
Кроме того, время выполнения задания (26 минут) также указывает на то, что эти 5 ядер действительно vcores, а не 5 потоков внутри 1 ядра (это только мое понимание, я могу быть совершенно не прав).
Может ли кто-нибудь помочь мне понять это?
1 ответ
Сообщаемое YARN число vCores, как известно, является неправильным; это известная проблема, связанная с планировщиком емкости при использовании со Spark, но это только косметическая проблема, поскольку она работает так, как задумано в Dataproc, и предпочитает только бинарную упаковку на основе памяти и допускает переподписку vCores, если желательно для высоких -ИО рабочие места. Даже если YARN настроен на включение ядер в бинарную упаковку, он все равно не обеспечивает изоляцию процессора. Количество ядер на каждого исполнителя, указанное в пользовательском интерфейсе Spark, является правильным для доверия.
Посмотрите этот связанный ответ Stackru: Dataproc устанавливает количество vcores на контейнер исполнителя