繁体   English   中英

计划Spark Job Java

[英]Scheduling a Spark Job Java

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

如何使用Java实现此目的。

有图书馆吗? 还是可以用Java中的Thread做到这一点?

任何建议表示赞赏!

如果您仍然想使用spark-submit我宁愿使用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
     }
...

但是您的问题是关于一些调度库的。 您可以使用Java util( java.util.TimerTask )中提供的带有Date的简单Timer ,但是我更喜欢使用Quartz Job Scheduling Library-它非常流行(因为我知道spring也使用Quartz Scheduler )。

Spring还具有集成类,用于支持与Timer(自1.3起成为JDK的一部分)和Quartz Scheduler( http://quartz-scheduler.org )...一起支持的调度。

使用Quartz,您可以设置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);

不太可能 -如果您具有Spring Boot应用程序,则可以使用调度非常简单地运行某些方法-在配置中只需@EnableScheduling ,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM