2016-10-07 16 views
1

私は現在、スパークストリーミングを使用していません。私はETLパイプラインを持っており、完了した後に仕事を再提出するだけです。典型的なcronジョブと同じですが、Spark APIのみを使用しています。それは可能ですか?完了後にSparkでジョブを再送信するには?

答えて

4

チェックSparkLauncherと、このような何か試してください:あなたはSparkLauncherでプログラム的にジョブを送信することができます。これにより

import org.apache.spark.launcher.SparkLauncher; 

public class MyLauncher { 
    public static void main(String[] args) throws Exception { 

     while(true){ 
      Process spark = new SparkLauncher() 
      .setAppResource("app.jar") 
      .setMainClass("package.MainClass") 
      .setMaster("local") 
      .setConf(SparkLauncher.DRIVER_MEMORY, "1g") 
      .launch(); 
      spark.waitFor(); <-- Causes the current thread to wait, if necessary, until the process represented by this Process object has terminated. 
     } 
    } 
} 

を。 launch()はjava Processを返します。処理が完了するまで待ってから、whileでジョブを再送信してください。

私は​​が単独でジョブを再開できることに気づいていません。

+0

SparkLauncherにSparkConfを設定する方法があったとしたら、SparkLauncher()を実行するだけで済みます。setSparkConf(sparkConf).launch() – user1870400

+1

確かに、必要な場合は、あなたはSparkLauncherを拡張し、 'setSparkConf(SparkConf sparkConf)'とSparkConf 'getAll'設定を作成し、' setConf(actConf.key、actConf.value) 'を使ってforループに設定することで、 – VladoDemcak

関連する問題