Как передать пользовательский SPARK_CONF_DIR подчиненным устройствам в автономном режиме

#apache-spark

#apache-spark

Вопрос:

Я нахожусь в процессе установки Spark в общей кластерной среде. Мы решили использовать автономный режим spark и используем «start-all.sh » команда включена в sbin для запуска Spark workers. Из-за общей архитектуры кластера SPARK_HOME находится в общем каталоге, недоступном для записи пользователями. Поэтому мы создаем каталоги «run» в пользовательском scratch, на которые могут быть указаны каталоги SPARK_CONF_DIR, каталог журналов и рабочие каталоги.

Проблема в том, что SPARK_CONF_DIR никогда не устанавливается на рабочих узлах, поэтому по умолчанию они имеют значение $SPARK_HOME/conf, в котором есть только шаблоны. Что я хочу сделать, это пройти через SPARK_CONF_DIR с главного узла на подчиненные узлы. Я определил решение, но оно требует исправления для sbin/start-slaves.sh:

sbin/start_slaves.sh

 46c46
< "${SPARK_HOME}/sbin/slaves.sh" cd "${SPARK_HOME}" ; export SPARK_CONF_DIR=${SPARK_CONF_DIR} ; "$SPARK_HOME/sbin/start-slave.sh" "spark://$SPARK_MASTER_HOST:$SPARK_MASTER_PORT"
---
> "${SPARK_HOME}/sbin/slaves.sh" cd "${SPARK_HOME}" ; "${SPARK_HOME}/sbin/start-slave.sh" "spark://$SPARK_MASTER_HOST:$SPARK_MASTER_PORT"
 

Есть ли здесь какие-либо лучшие решения, которые не требуют исправления исходного кода Spark?

Одним из решений, конечно, было бы скопировать и переименовать start-all.sh и start-slaves.sh и используйте их вместо sbin/start-all.sh . Но есть ли что-нибудь более элегантное?

Спасибо за ваше время.

Комментарии:

1. Почему бы не установить SPARK_CONF_DIR в вашей программе?

2. Это происходит до запуска пользовательской программы. Я считаю, что spark-submit может запускать задачи, но исполнители уже будут запущены. Возможно ли запустить исполнители с помощью пользовательской программы?

Ответ №1:

Если вы хотите запустить автономный режим, вы можете попробовать настроить SPARK_CONF_DIR в своей программе. Возьмем, к примеру, pyspark:

 import os
from pyspark.sql import SparkSession

os.environ["SPARK_CONF_DIR"] = "/path/to/configs/conf1"
spark  = SparkSession.builder.getOrCreate()