2016-02-02 3 views
6

Я создал кластер Spark в Openstack, работающий на Ubuntu14.04 с 8 гб оперативной памяти. Я создал две виртуальные машины с 3gb каждый (сохранение 2 gb для родительской ОС). Кроме того, я создаю мастера и 2 рабочих с первой виртуальной машины и 3 рабочих со второй машины.Apache Spark: «не удалось запустить org.apache.spark.deploy.worker.Worker» или мастер

spark-env.sh файл имеет базовую настройку с

export SPARK_MASTER_IP=10.0.0.30 
export SPARK_WORKER_INSTANCES=2 
export SPARK_WORKER_MEMORY=1g 
export SPARK_WORKER_CORES=1 

Всякий раз, когда я развернуть кластер с start-all.sh, я получаю «не удалось запустить org.apache.spark.deploy.worker. Работник «и несколько раз» не смог запустить org.apache.spark.deploy.master.Master ». Когда я вижу лог-файл, чтобы искать ошибки я получаю следующее

Спарк Команда:/USR/Библиотека/JVM/Java-7-OpenJDK-amd64/бен/Java -cp>/дома/Ubuntu/искру -1.5.1/SBIN /../ CONF /:/главная/убунту/искровым> 1.5.1/сборки/мишени/2,10-Скала/искровым сборочно-1.5.1-> hadoop2.2.0.jar:/дом /ubuntu/spark-1.5.1/lib_managed/jars/datanucleus-api->jdo-3.2.6.jar:/home/ubuntu/spark-1.5.1/lib_managed/jars/datanucleus-core->3.2.10. jar: /home/ubuntu/spark-1.5.1/lib_managed/jars/datanucleus-rdbms-> 3.2.9.jar -Xms1g -Xmx1g -XX: MaxPermSize = 256m> org.apache.spark.deploy.master.Master - -ip 10.0.0.30 --port 7077 --webui-> порт 8080

Хотя я получаю сообщение об ошибке, но мастер или w orker оживают через несколько секунд.

Может кто-нибудь объяснить причину?

+1

Я переключил журналы с ERROR на INFO, и я увидел два предупреждения. 1. Ваше имя хоста, worker1 разрешает адрес loopback: 127.0.1.1; используя вместо этого 10.0.0.30 (по этике интерфейса) и 2. Невозможно загрузить библиотеку native-hadoop для вашей платформы ... используя встроенные классы Java, где это применимо. Могут ли они помешать развертыванию кластера? – jsingh13

ответ

6

Система конфигурации Spark - это беспорядок переменных среды, флагов аргументов и файлов свойств Java. Я только что провел пару часов разыскивая такое же предупреждение, и распутывания процедуру инициализации Спарк, и вот что я нашел:

  1. sbin/start-all.sh вызовы sbin/start-master.sh (и затем sbin/start-slaves.sh)
  2. sbin/start-master.sh звонки sbin/spark-daemon.sh start org.apache.spark.deploy.master.Master ...
  3. sbin/spark-daemon.sh start ... вилки вызыв вызова bin/spark-class org.apache.spark.deploy.master.Master ..., захватывает результирующий идентификатор процесса (pid), спящий на 2 секунды, а затем проверяет, является ли это имя команды pid «java»
  4. bin/spark-class - это сценарий bash, поэтому она начинается с именем команды «Башем», и переходит к:
    1. (перо) загрузки среды Спарка по поиску bin/load-spark-env.sh
    2. находит java исполняемого
    3. найдет правильный искру Jar
    4. звонков java ... org.apache.spark.launcher.Main ..., чтобы получить полный путь к классам, необходимые для развертывания Спарка
    5. , наконец, руками над управлением, с помощью 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 

Там! Он предполагает, что я использую все порты по умолчанию и прочее, и что я не делаю глупого дерьма, как помещать пробелы в имена файлов, но я думаю, что это чище.