2015-11-16 2 views
5

Я пытаюсь использовать искру на пряжу в приложении scala sbt вместо прямого использования spark-submit.Добавить конфигурацию кластера пряжи в приложение Spark

У меня уже есть пульт удаленной пряжи, и я могу подключиться к кластеру с прямыми работами в SparkR. Но когда я пытаюсь сделать подобное в приложении scala, он не может загрузить мои переменные окружения в конфигурации пряжи и вместо этого использовать адрес и порт пряжи по умолчанию.

Применение SBT только простой объект:

object simpleSparkApp { 
    def main(args: Array[String]): Unit = { 
    val conf = new SparkConf() 
     .setAppName("simpleSparkApp") 
     .setMaster("yarn-client") 
     .set("SPARK_HOME", "/opt/spark-1.5.1-bin-hadoop2.6") 
     .set("HADOOP_HOME", "/opt/hadoop-2.6.0") 
     .set("HADOOP_CONF_DIR", "/opt/hadoop-2.6.0/etc/hadoop") 
    val sc = new SparkContext(conf) 
    } 
} 

Когда я запускаю это приложение в IntelliJ IDEA журнал говорит:

15/11/15 18:46:05 INFO RMProxy: Connecting to ResourceManager at /0.0.0.0:8032 
15/11/15 18:46:06 INFO Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8032. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS) 
15/11/15 18:46:07 INFO Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8032. Already tried 1 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS) 
... 

Кажется, среда не добавляется правильно, потому что 0.0.0.0 является а не ip удаленного узла управления ресурсом нити, а у моего spark-env.sh есть:

export JAVA_HOME="/usr/lib/jvm/ibm-java-x86_64-80" 
export HADOOP_HOME="/opt/hadoop-2.6.0" 
export HADOOP_CONF_DIR="$HADOOP_HOME/etc/hadoop" 
export SPARK_MASTER_IP="master" 

и мой yarn-site.xml имеет:

<property> 
    <name>yarn.resourcemanager.hostname</name> 
    <value>master</value> 
</property> 

Как правильно добавить переменные окружения из конфигурации кластера пряжи для этого SBT применения Спарк?

Дополнительная информация:

Моя система Ubuntu14.04 и код SparkR, который может подключаться к кластеру пряжи выглядит следующим образом:

Sys.setenv(HADOOP_HOME = "/opt/hadoop-2.6.0") 
Sys.setenv(SPARK_HOME = "/opt/spark-1.4.1-bin-hadoop2.6") 
.libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths())) 
library(SparkR) 
sc <- sparkR.init(master = "yarn-client") 

ответ

7

В эти дни, нет из раствора коробки для избегайте использования искры-подачи для режима Пряжа.

искровым отправить: запустить задание, искровым Представлять запустить org.apache.spark.deploy.yarn.Client код на настроенной среде (или не настроен, как в вашем случае). Вот Клиент, который выполняет задачу: https://github.com/apache/spark/blob/master/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala

Какое решение?

  1. Был вариант переопределить поведение клиента, как можно было бы найти здесь http://blog.sequenceiq.com/blog/2014/08/22/spark-submit-in-java/ , так что вы можете добавить дополнительные переменные ENV и т.д. Позже Спарк сделал клиент пряжи частного к свече пакета (~ конец 2014 года). Так что, если имя вашего пакета org.apache.spark - это, возможно, вариант ..

  2. Встроенный в верхней части свечи подать раствор (с его достоинствами и недостатками) описана здесь: http://www.henningpetersen.com/post/22/running-apache-spark-jobs-from-applications

Что относительно SparkR.R, использует искровой-внутренне: заполните https://github.com/apache/spark/blob/master/R/pkg/R/sparkR.R , когда его называют launchBackend() от https://github.com/apache/spark/blob/master/R/pkg/R/client.R и дать там все окружение набор уже + аргументы

+0

Спасибо, я не ожидал, что это быть таким громоздким. Вы также пробовали использовать искру в приложении на мезо? Было бы проще, потому что мы обеспечиваем явный заголовок адресного порта мезоса? – Bamqf

+0

Извините, у нас не было возможности проверить Mesos –

Смежные вопросы