在Java中调度Spark作业
我有一个Spark工作,它读取HBase表、一些聚合并将数据存储到mongoDB。当前,此作业正在使用spark submit脚本手动运行。我想安排它以固定的间隔运行 如何使用java实现这一点 有图书馆吗? 或者我可以用java中的线程来实现这一点在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 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();
}