#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:
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()