Я прочитал обзор режима кластера и до сих пор не могу понять различные процессы в автономном кластере Spark и параллелизм.
Рабочий процесс JVM или нет? Я запустил bin\start-slave.sh
и обнаружил, что он породил рабочего, который на самом деле является JVM.
Согласно приведенной выше ссылке, исполнитель - это процесс, запускаемый для приложения на рабочем узле, на котором выполняются задачи. Исполнитель также является JVM.
Это мои вопросы:
Исполнители по заявке. Тогда какова роль работника? Он координирует с исполнителем и сообщает результат обратно водителю? Или водитель напрямую общается с исполнителем? Если так, то какова цель работника тогда?
Как контролировать количество исполнителей для заявки?
Могут ли задачи выполняться параллельно исполнителю? Если да, то как настроить количество потоков для исполнителя?
Какова связь между работником, исполнителями и ядрами исполнителя (--total-executor-cores)?
Что значит иметь больше работников на узел?
обновленный
Давайте рассмотрим примеры, чтобы лучше понять.
Пример 1. Автономный кластер с 5 рабочими узлами (каждый узел имеет 8 ядер). Когда я запускаю приложение с настройками по умолчанию.
Пример 2 Та же конфигурация кластера, что и в примере 1, но я запускаю приложение со следующими настройками --executor-cores 10 --total-executor-cores 10.
Пример 3 Та же конфигурация кластера, что и в примере 1, но я запускаю приложение со следующими настройками --executor-cores 10 --total-executor-cores 50.
Пример 4 Та же конфигурация кластера, что и в примере 1, но я запускаю приложение со следующими настройками --executor-cores 50 --total-executor-cores 50.
Пример 5 Та же конфигурация кластера, что и в примере 1, но я запускаю приложение со следующими настройками --executor-cores 50 --total-executor-cores 10.
В каждом из этих примеров Сколько исполнителей? Сколько потоков на одного исполнителя? Сколько ядер? Как определяется количество исполнителей для каждой заявки? Всегда ли это количество рабочих?