[英]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.