在Java中调度Spark作业

在Java中调度Spark作业,java,hadoop,apache-spark,scheduled-tasks,quartz-scheduler,Java,Hadoop,Apache Spark,Scheduled Tasks,Quartz Scheduler,我有一个Spark工作,它读取HBase表、一些聚合并将数据存储到mongoDB。当前,此作业正在使用spark submit脚本手动运行。我想安排它以固定的间隔运行 如何使用java实现这一点 有图书馆吗? 或者我可以用java中的线程来实现这一点 任何建议,谢谢 如果您仍然想使用spark submit我更喜欢crontab或类似的东西,比如运行bash脚本 但是如果您需要从java运行“spark submit”,您可以查看。使用这种方法,您可以使用SparkLauncher以编程方式启动

我有一个Spark工作,它读取HBase表、一些聚合并将数据存储到mongoDB。当前,此作业正在使用spark submit脚本手动运行。我想安排它以固定的间隔运行

如何使用java实现这一点

有图书馆吗? 或者我可以用java中的线程来实现这一点


任何建议,谢谢

如果您仍然想使用
spark submit
我更喜欢crontab或类似的东西,比如运行bash脚本

但是如果您需要从java运行“spark submit”,您可以查看。使用这种方法,您可以使用
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
     }
...
创建spark-Quartz作业

   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);
不太可能-如果您有spring boot应用程序,您可以非常轻松地使用调度来运行某些方法-只需在配置中使用
@EnableScheduling
,类似以下内容:

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

要计划作业,可以使用cron
@Scheduled(fixedRate = 300000)
public void periodicalRunningSparkJob() {
    log.info("Spark job periodically execution");
    startApacheSparkApplication();
}