Dataproc устанавливает количество vcores на контейнер исполнителя

Я создаю искровое приложение, которое будет работать на Dataproc. Я планирую использовать эфемерные кластеры и раскручивать новые для каждого выполнения приложения. Поэтому я хочу, чтобы моя работа поглощала как можно больше ресурсов кластера, и у меня есть очень хорошее представление о требованиях.

Я поиграл с отключением динамического выделения и настройкой экземпляров и ядер исполнителя. В настоящее время я использую 6 экземпляров и 30 ядер поп.

Возможно, это скорее вопрос пряжи, но я нахожу, что отношения между контейнером vCores и моими ядрами искрового исполнителя немного сбивают с толку. В пользовательском интерфейсе менеджера приложений YARN я вижу, что создаются 7 контейнеров (1 драйвер и 6 исполнителей), и каждый из них использует 1 vCore. Однако в рамках spark я вижу, что сами исполнители используют указанные 30 ядер.

Так что мне любопытно, если исполнители пытаются выполнить 30 задач параллельно на том, что по сути является 1 основным блоком. Или, может быть, vCore, отображаемый в графическом интерфейсе AM, ошибочен?

Если это первое, интересно, как лучше настроить это приложение, чтобы у меня был один исполнитель на рабочий узел, и все процессоры используются.

1 ответ

Решение

VCore, отображаемое в графическом интерфейсе YARN, является ошибочным; это не очень хорошо задокументированная, но известная проблема с capacity-scheduler, который является Dataproc по умолчанию. Примечательно, что при настройках по умолчанию в Dataproc YARN выполняет только упаковку бина ресурсов на основе памяти, а не процессоров; Преимущество состоит в том, что это более универсально для переподписки процессоров в различной степени в зависимости от желаемой нагрузки на рабочую нагрузку, особенно если что-то связано с вводом-выводом, но недостатком является то, что YARN не будет отвечать за фиксированное использование процессора.

См. /questions/25507663/pochemu-vcore-vsegda-ravno-chislu-uzlov-v-spark-na-yarn/25507673#25507673 для некоторого обсуждения перехода на fair-scheduler чтобы увидеть распределение vcores, точно представленное в YARN. Тем не менее, в вашем случае, вероятно, нет никакой пользы от этого; Заставить YARN выполнить бин-упаковку в обоих измерениях - это скорее проблема "общего многопользовательского кластера", которая только усложняет задачу планирования.

В вашем случае лучший способ настроить ваше приложение - просто игнорировать то, что YARN говорит о vcores; если вам нужен только один исполнитель на рабочий узел, то установите максимальный размер памяти для исполнителя, который будет соответствовать YARN на узел, и сделайте количество ядер на исполнителя равным общему количеству ядер на узел.

Другие вопросы по тегам