web-dev-qa-db-fra.com

Comment soumettre un travail spark sur un nœud maître distant en mode client de fil?

Je dois soumettre spark apps/jobs sur un cluster distant spark. J'ai actuellement spark sur ma machine et le Adresse IP du nœud maître en tant que client de fil. Btw ma machine n'est pas dans le cluster. Je soumets mon travail avec cette commande

./spark-submit --class SparkTest --deploy-mode client /home/vm/app.jar 

J'ai l'adresse de mon maître codée en dur dans mon application sous la forme

val spark_master = spark://IP:7077

Et pourtant, tout ce que je reçois est l'erreur

16/06/06 03:04:34 INFO AppClient$ClientEndpoint: Connecting to master spark://IP:7077...
16/06/06 03:04:34 WARN AppClient$ClientEndpoint: Failed to connect to master IP:7077
Java.io.IOException: Failed to connect to /IP:7077
at org.Apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.Java:216)
at org.Apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.Java:167)
at org.Apache.spark.rpc.netty.NettyRpcEnv.createClient(NettyRpcEnv.scala:200)
at org.Apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:187)
at org.Apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:183)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
at Java.lang.Thread.run(Thread.Java:745)
Caused by: Java.net.ConnectException: Connection refused: /IP:7077

Ou plutôt si j'utilise

./spark-submit --class SparkTest --master yarn --deploy-mode client /home/vm/test.jar

Je reçois

Exception in thread "main" Java.lang.Exception: When running with master 'yarn' either HADOOP_CONF_DIR or YARN_CONF_DIR must be set in the environment.
at org.Apache.spark.deploy.SparkSubmitArguments.validateSubmitArguments(SparkSubmitArguments.scala:251)
at org.Apache.spark.deploy.SparkSubmitArguments.validateArguments(SparkSubmitArguments.scala:228)
at org.Apache.spark.deploy.SparkSubmitArguments.<init>(SparkSubmitArguments.scala:109)
at org.Apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:114)
at org.Apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Dois-je vraiment aussi avoir hadoop configuré sur mon poste de travail? Tout le travail sera effectué à distance et cette machine ne fait pas partie du cluster. J'utilise Spark 1.6.1.

14
Mnemosyne

Tout d'abord, si vous définissez conf.setMaster(...) à partir de votre code d'application, il a la priorité la plus élevée (sur l'argument --master). Si vous souhaitez exécuter en mode client de fil, n'utilisez pas MASTER_IP: 7077 dans le code d'application. Vous devez fournir les fichiers de configuration du client hadoop à votre pilote de la manière suivante.

Vous devez définir la variable d'environnement HADOOP_CONF_DIR ou YARN_CONF_DIR pour pointer vers le répertoire qui contient les configurations client.

http://spark.Apache.org/docs/latest/running-on-yarn.html

Selon les fonctionnalités hadoop que vous utilisez dans votre application spark, certains fichiers de configuration seront utilisés pour rechercher la configuration. Si vous utilisez Hive (via HiveContext dans spark-sql), il recherchez Hive-site.xml. hdfs-site.xml sera utilisé pour rechercher les coordonnées de lecture/écriture de NameNode sur HDFS à partir de votre travail.

16
Pranav Shukla