2015-11-16 18 views
5

Sto provando a utilizzare la scintilla sul filato in un'applicazione scala sbt invece di utilizzare direttamente spark-submit.Aggiungi la configurazione del cluster di filato all'applicazione Spark

Ho già un cluster di filato remoto in esecuzione e posso collegarmi ai lavori spark in filato di cluster in SparkR. Ma quando provo a fare cose simili in un'applicazione scala, non posso caricare le mie variabili di ambiente in configurazioni di filato e invece utilizzare l'indirizzo e la porta del filato di default.

L'applicazione SBT è solo un semplice oggetto:

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) 
    } 
} 

Quando eseguo questa applicazione in IntelliJ IDEA registro dice:

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) 
... 

Sembra che l'ambiente non viene aggiunto correttamente perché 0.0.0.0 è non l'IP del nodo di gestione risorse filo remoto e il mio spark-env.sh ha:

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" 

e la mia yarn-site.xml ha:

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

Come posso aggiungere correttamente le variabili d'ambiente di configurazione cluster filato a questa applicazione Spark sbt?

Ulteriori informazioni:

il mio sistema è Ubuntu14.04 e il codice SparkR in grado di connettersi al cluster filato si presenta così:

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") 

risposta

7

In questi giorni, non c'è fuori dalla soluzione di dialogo per evitare l'uso di spark-submit per la modalità Yarn.

Spark-presentare: per eseguire il lavoro, scintille submit eseguire il codice diorg.apache.spark.deploy.yarn.Client sull'ambiente configurato (o non è configurata come nel tuo caso). Ecco il client che invia l'invio dell'ordine: https://github.com/apache/spark/blob/master/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala

Quale soluzione però?

  1. c'era un'opzione per ignorare il comportamento del cliente come potrebbe essere trovato qui http://blog.sequenceiq.com/blog/2014/08/22/spark-submit-in-java/ in modo che si potrebbe aggiungere un variabili env aggiuntivi, ecc Spark Più tardi, il cliente Yarn privato al pacchetto scintilla (~ la fine 2014). Quindi, se per citarne vostro pacchetto org.apache.spark - è probabilmente un'opzione ..

  2. Il costruito in cima ad una soluzione scintilla presentare (con i suoi vantaggi e svantaggi) è descritto qui: http://www.henningpetersen.com/post/22/running-apache-spark-jobs-from-applications

Che dire di SparkR.R, utilizza scintilla compila internamente: https://github.com/apache/spark/blob/master/R/pkg/R/sparkR.R quando si chiama launchBackend() da https://github.com/apache/spark/blob/master/R/pkg/R/client.R e dare lì tutto l'ambiente impostate già + argomenti

+0

Grazie, non mi aspetto che questo essere così ingombrante Hai provato anche a usare l'accendino nell'applicazione sul mesos? Sarebbe più facile dal momento che forniamo esplicitamente la porta per l'indirizzo principale del mesos? – Bamqf

+0

Spiacente, non ho avuto la possibilità di controllare su Mesos –