Система конфигурации Spark - это беспорядок переменных среды, флагов аргументов и файлов свойств Java. Я только что провел пару часов разыскивая такое же предупреждение, и распутывания процедуру инициализации Спарк, и вот что я нашел:
sbin/start-all.sh
вызовы sbin/start-master.sh
(и затем sbin/start-slaves.sh
)
sbin/start-master.sh
звонки sbin/spark-daemon.sh start org.apache.spark.deploy.master.Master ...
sbin/spark-daemon.sh start ...
вилки вызыв вызова bin/spark-class org.apache.spark.deploy.master.Master ...
, захватывает результирующий идентификатор процесса (pid), спящий на 2 секунды, а затем проверяет, является ли это имя команды pid «java»
bin/spark-class
- это сценарий bash, поэтому она начинается с именем команды «Башем», и переходит к:
- (перо) загрузки среды Спарка по поиску
bin/load-spark-env.sh
- находит
java
исполняемого
- найдет правильный искру Jar
- звонков
java ... org.apache.spark.launcher.Main ...
, чтобы получить полный путь к классам, необходимые для развертывания Спарка
- , наконец, руками над управлением, с помощью
exec
, чтобы java ... org.apache.spark.deploy.master.Master
, в котором указать название команды становится «Java»
Если шаги 4,1 через 4,5 занимает больше времени, чем на 2 секунды, что в моем (и ваш) опыт кажется почти неизбежным на свежей ОС, где java
никогда не запускался ранее, вы получите «не удалось запускать ", несмотря на то, что ничего не произошло.
Рабы будут жаловаться по той же причине и трэш вокруг до тех пор, пока мастер не будет доступен, но они должны продолжать повторять попытку, пока они не смогут успешно подключиться к мастеру.
У меня довольно стандартное развертывание Spark, работающее на EC2; Я использую:
conf/spark-defaults.conf
установить spark.executor.memory
и добавить некоторые пользовательские банки через spark.{driver,executor}.extraClassPath
conf/spark-env.sh
установить SPARK_WORKER_CORES=$(($(nproc) * 2))
conf/slaves
перечислить мои рабы
Вот как я начала развертывание Спарк, минуя некоторые из минных полей/лабиринта {bin,sbin}/*.sh
:
# on master, with SPARK_HOME and conf/slaves set appropriately
mapfile -t ARGS < <(java -cp $SPARK_HOME/lib/spark-assembly-1.6.1-hadoop2.6.0.jar org.apache.spark.launcher.Main org.apache.spark.deploy.master.Master | tr '\0' '\n')
# $ARGS now contains the full call to start the master, which I daemonize with nohup
SPARK_PUBLIC_DNS=0.0.0.0 nohup "${ARGS[@]}" >> $SPARK_HOME/master.log 2>&1 < /dev/null &
Я до сих пор использую sbin/start-daemon.sh
начать раб, так как это проще, чем вызов nohup
в команде ssh
:
MASTER=spark://$(hostname -i):7077
while read -r; do
ssh -o StrictHostKeyChecking=no $REPLY "$SPARK_HOME/sbin/spark-daemon.sh start org.apache.spark.deploy.worker.Worker 1 $MASTER" &
done <$SPARK_HOME/conf/slaves
# this forks the ssh calls, so wait for them to exit before you logout
Там! Он предполагает, что я использую все порты по умолчанию и прочее, и что я не делаю глупого дерьма, как помещать пробелы в имена файлов, но я думаю, что это чище.
Я переключил журналы с ERROR на INFO, и я увидел два предупреждения. 1. Ваше имя хоста, worker1 разрешает адрес loopback: 127.0.1.1; используя вместо этого 10.0.0.30 (по этике интерфейса) и 2. Невозможно загрузить библиотеку native-hadoop для вашей платформы ... используя встроенные классы Java, где это применимо. Могут ли они помешать развертыванию кластера? – jsingh13