4

私はHBaseテーブルを読み込み、いくつかの集計を行い、mongoDBにデータを格納するSparkジョブを持っています。現在、このジョブはspark-submitスクリプトを使用して手動で実行されています。私は一定の間隔で実行するようにスケジュールしたいスパークジョブのスケジューリングJava

これを実現するには、javaを使用します。

任意のライブラリですか? またはJavaのスレッドでこれを行うことはできますか?

ご了承ください。

+1

あなたはそれが私のために働くクーロン – Bhavesh

答えて

2

​​をまだ使用したい場合は、のcrontabなどを好んで使用し、たとえばbashスクリプトを実行します。

javaから "spark-submit"を実行する必要がある場合は、Package org.apache.spark.launcherをご覧ください。この方法では、SparkLauncherを使用してプログラムをプログラムで開始できます。

import org.apache.spark.launcher.SparkAppHandle; 
import org.apache.spark.launcher.SparkLauncher; 

... 

    public void startApacheSparkApplication(){ 
     SparkAppHandle handler = new SparkLauncher() 
     .setAppResource("pathToYourSparkApp.jar") 
     .setMainClass("your.package.main.Class") 
     .setMaster("local") 
     .setConf(...) 
     .startApplication(); // <-- and start spark job app 
    } 
... 

ご質問はスケジューリングライブラリに関するものです。 をDateとjava util(java.util.TimerTask)で提供していますが、Quartz Job Scheduling Libraryを使用することをお勧めします。これは本当に人気があります(私が春に知っているようにuses Quartz Scheduler too)。

春もタイマー、1.3以降のJDKの一部、およびクォーツスケジューラ( http://quartz-scheduler.org) でスケジューリング をサポートするための統合教室を提供しています....

クォーツを使用すると、cronのスケジュールを設定することができます私にとっては、石英で作業する方がより簡単です。

ちょうど火花作成Mavenの依存関係

<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --> 
<dependency> 
    <groupId>org.quartz-scheduler</groupId> 
    <artifactId>quartz</artifactId> 
    <version>2.2.3</version> 
</dependency> 

を追加 -

public class SparkLauncherQuartzJob implements Job { 
     startApacheSparkApplication(); 
    ... 

今トリガーを作成し、スケジュールクォーツジョブをそれ

// trigger runs every hour 
Trigger trigger = new Trigger() 
      .withIdentity("sparkJob1Trigger", "sparkJobsGroup") 
      .withSchedule(
       CronScheduleBuilder.cronSchedule("0 * * * * ?")) 
      .build(); 


    JobDetail sparkQuartzJob = JobBuilder.newJob(SparkLauncherQuartzJob.class).withIdentity("SparkLauncherQuartzJob", "sparkJobsGroup").build(); 

    Scheduler scheduler = new StdSchedulerFactory().getScheduler(); 
    scheduler.start(); 
    scheduler.scheduleJob(sparkQuartzJob , trigger); 

無理だろ - あなたは春のブートアプリケーションを持っている場合は、非常に簡単にいくつかの方法を実行するためのスケジューリングを使用することができます - ちょうど@EnableScheduling設定とこのようなもので:

@Scheduled(fixedRate = 300000) 
public void periodicalRunningSparkJob() { 
    log.info("Spark job periodically execution"); 
    startApacheSparkApplication(); 
} 
+0

を使用することができ、ジョブをスケジュールします。ありがとうございました :) – Vaisakh

関連する問題