2016-07-27 8 views
1

Javaコード内でSpark StreamingジョブをYARNに送信する方法を見つけると、ついにorg.apache.spark.deploy.yarn 。クライアントを送信してください。すべてうまく見えますが、今はspark.dynamicAllocation.enabledのようなSparkまたはSpark Streamingの設定を設定できません。Javaコード内でクライアントとのYARNにSpark Streamingジョブを送信するときに設定を行うことができません

私は、JavaSparkContextを作成するために使用されるSparkConfを設定ClientArgumentsClientを作成するために使用されるSparkConfを設定し、System.setProperty(xxx)を使用してのように、様々な方法を試してみましたが、それらのどれも動作しません。私は構成を動的に設定しようとしていますが、のspark-defaults.confを変更しても何も変わりません。

私はSparkSubmit.main(xxx)Runtime.getRuntime.exec("spark-submit", "xxx")のようにジョブを送信するための他の方法も試しましたが、この問題の横には、さらに問題があり、推奨される方法ではないようです。

誰かが私に回避策を教えてもらえますか?

答えて

1

SparkLauncherを使用すると、JavaコードからYarnクラスタでジョブを実行することができます。たとえば、私は私のJava Webアプリケーションからsparkジョブを実行するために使用し、sparkジョブjarはWebアプリケーションjarにパッケージ化されています。

あなたはスパークバージョン1.5を使用して下げた場合、( SparkLauncher packageを参照)、このように見えるようになるだろう:

Process sparkLauncherProcess = new SparkLauncher() 
     .setSparkHome(SPARK_HOME) 
     .setJavaHome(JAVA_HOME) 
     .setAppResource(SPARK_JOB_JAR_PATH) 
     .setMainClass(SPARK_JOB_MAIN_CLASS) 
     .addAppArgs("arg1", "arg2") 
     .setMaster("yarn-cluster") 
     .setConf("spark.dynamicAllocation.enabled", "true") 
     .launch(); 
    sparkLauncherProcess.waitFor(); 

あなたはスパークバージョン1.6以降を使用している場合、SparkLauncher package SparkAppHandleはいくつかを持っている参照(これのように見えるようになるだろう追加機能):

SparkAppHandle handle = new SparkLauncher() 
     .setSparkHome(SPARK_HOME) 
     .setJavaHome(JAVA_HOME) 
     .setAppResource(SPARK_JOB_JAR_PATH) 
     .setMainClass(SPARK_JOB_MAIN_CLASS) 
     .addAppArgs("arg1", "arg2") 
     .setMaster("yarn-cluster") 
     .setConf("spark.dynamicAllocation.enabled", "true") 
     .startApplication(); 

あなたが必要とする唯一の依存性がある:

<dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-launcher_2.11</artifactId> 
     <version>1.5.0</version> 
     <scope>provided</scope> 
    </dependency> 
関連する問題