私はHBaseテーブルを読み込み、いくつかの集計を行い、mongoDBにデータを格納するSparkジョブを持っています。現在、このジョブはspark-submitスクリプトを使用して手動で実行されています。私は一定の間隔で実行するようにスケジュールしたいスパークジョブのスケジューリングJava
これを実現するには、javaを使用します。
任意のライブラリですか? またはJavaのスレッドでこれを行うことはできますか?
ご了承ください。
私はHBaseテーブルを読み込み、いくつかの集計を行い、mongoDBにデータを格納するSparkジョブを持っています。現在、このジョブはspark-submitスクリプトを使用して手動で実行されています。私は一定の間隔で実行するようにスケジュールしたいスパークジョブのスケジューリングJava
これを実現するには、javaを使用します。
任意のライブラリですか? またはJavaのスレッドでこれを行うことはできますか?
ご了承ください。
をまだ使用したい場合は、の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();
}
を使用することができ、ジョブをスケジュールします。ありがとうございました :) – Vaisakh
あなたはそれが私のために働くクーロン – Bhavesh