package common;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.hadoop.util.Tool;
public class JobBuilder {
private final Class<?> driverClass;
private final JobConf conf;
private final int extraArgCount;
private final String extraArgsUsage;
private String[] extraArgs;
public JobBuilder(Class<?> driverClass){
this(driverClass,0,"");
}
public JobBuilder(Class<?> driverClass, int extraArgCount, String extraArgsUage) {
this.driverClass = driverClass;
this.extraArgCount= extraArgCount;
this.extraArgsUsage = extraArgsUage;
this.conf = new JobConf(driverClass);
}
public static JobConf parseInputAndOutput(Tool tool, Configuration conf, String[] args){
if(args.length != 2){
printUsage(tool, "<input><output>");
return null;
}
JobConf jobConf = new JobConf(conf, tool.getClass());
FileInputFormat.addInputPath(jobConf, new Path(args[0]));
FileOutputFormat.setOutputPath(jobConf, new Path(args[1]));
return jobConf;
}
private static void printUsage(Tool tool, String extraArgsUsage) {
// TODO Auto-generated method stub
System.err.printf("Usage: %s [genericOptions] %s \n\n", tool.getClass().getSimpleName(),
extraArgsUsage);
GenericOptionsParser.printGenericCommandUsage(System.err);
}
private JobBuilder withCommandLineArgs(String... args) throws IOException{
GenericOptionsParser parser = new GenericOptionsParser(conf, args);
String[] otherArgs = parser.getRemainingArgs();
if(otherArgs.length < 2 || otherArgs.length > 3+extraArgCount){
System.err.printf("Usage: %s [genericOptions] [-overwrite] <input path> <output path> %s\n\n",
driverClass.getSimpleName(), extraArgsUsage);
GenericOptionsParser.printGenericCommandUsage(System.err);
System.exit(-1);
}
int index = 0;
boolean overwrite = false;
if(otherArgs[index].equals("-overwrite")){
overwrite = true;
index++;
}
Path inputPath = new Path(otherArgs[index++]);
Path outputPath = new Path(otherArgs[index++]);
if(index < otherArgs.length){
extraArgs = new String[otherArgs.length - index];
System.arraycopy(otherArgs, index, extraArgs, 0, otherArgs.length - index);
}
if(overwrite){
outputPath.getFileSystem(conf).delete(outputPath, true);
}
FileInputFormat.addInputPath(conf, inputPath);
FileOutputFormat.setOutputPath(conf, outputPath);
return this;
}
public JobConf build(){
return this.conf;
}
public String[] getExtraArgs(){
return this.extraArgs;
}
}
分享到:
相关推荐
Java Spring Quartz 动态定时任务是企业级应用中常见的需求,用于执行周期性的后台作业,如数据同步、报表生成等。Spring与Quartz的结合使用,使得我们可以方便地在Spring框架下管理定时任务,同时还能实现任务的...
首先,Java定时任务的实现通常会涉及到两个主要的API:Java的`java.util.Timer`类和`java.util.TimerTask`类,以及更强大且灵活的开源库Quartz Scheduler。这里我们主要讨论Quartz Scheduler,因为它在企业级应用中...
要完成这样的功能,我们通常会利用Java的定时任务框架,如`java.util.Timer`类、`java.util.concurrent.ScheduledExecutorService`或者更高级的Quartz库。以下将详细介绍如何使用这些方法来实现每日定时任务。 1. *...
JobDetail job = JobBuilder.newJob(YourCustomJob.class) .withIdentity(jobDto.getJobName(), jobDto.getJobGroup()) .build(); // 创建Trigger Trigger trigger = TriggerBuilder.newTrigger() ....
首先,Java内置了`java.util.Timer`和`java.util.TimerTask`类,它们提供了基本的定时任务功能。`Timer`类用于创建一个定时器,而`TimerTask`是可调度的任务类,继承自它即可定义需要定时执行的任务。以下是一个简单...
JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "group1") // 设置Job的名称和组名 .build(); // 创建CronTrigger实例 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder....
Java SpringBoot Quartz 定时任务是一个广泛应用于企业级开发中的技术组合,主要用于自动化执行周期性的任务。SpringBoot作为轻量级的框架,简化了Spring应用的初始搭建以及开发过程,而Quartz则是一个功能强大的...
`java.util.Timer` 类提供了一个调度任务的方法,而`TimerTask` 是一个抽象类,用于定义要在特定时间执行的任务。以下是如何使用它们的基本示例: ```java import java.util.Timer; import java.util.TimerTask; ...
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ExecutorServiceConfig { public static void main(String[] args) { ScheduledExecutorService ...
在JDK 1.3及以后的版本中,`java.util.Timer`类提供了基础的定时任务支持。不过,`Timer`类的功能相对有限,无法精确地在特定时间点执行任务,比如设置每天特定时间执行的任务。 Quartz是一个强大且灵活的开源作业...
Quartz 2.2 是一个开源的工作调度框架,它允许开发者在 Java 应用程序中创建、调度和管理任务。这个实例将展示如何利用 Quartz 2.2 创建一个每分钟执行一次的简单作业(Job)。我们将主要关注 `ExecJob.java` 和 `...
Java Quartz 是一个强大的开源作业调度框架,用于在Java应用程序中创建和管理计划任务。它允许开发者精确地安排任务执行,可以按需重复、延迟或在特定时间触发。在这个小例子中,我们将深入理解如何使用Java Quartz...
Java `java.util.Timer` 类是Java标准库中的一个轻量级定时任务工具。它的使用相对简单,适用于简单的定时任务需求。`Timer` 类包含两个主要的方法:`schedule(TimerTask task, Date firstTime)` 和 `schedule...
Java中实现定时任务的方式有很多,如使用`java.util.Timer`和`TimerTask`,或者使用更现代的`java.time`包中的`ScheduledExecutorService`。不过,最常用的是Quartz库,它提供了强大的定时任务管理能力,支持Cron...
JobDetail job = JobBuilder.newJob(SimpleJob.class) .withIdentity("myJob", "group1") .build(); Trigger trigger = createTrigger(); scheduler.scheduleJob(job, trigger); System.out.println("定时...
JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "group1") // 名称为"myJob",属于"group1"组 .build(); ``` 3. **创建Trigger**:根据需求选择合适的触发器类型,比如CronTrigger。 ...
JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "myGroup") // 设置任务名称和分组 .build(); ``` 接下来,定义 `Trigger` 来指定任务何时触发。这里可以使用 `SimpleTrigger` 来设置一...
JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "group1") // 设置Job的名字和组名 .build(); // 创建Trigger Trigger trigger = TriggerBuilder.newTrigger() .withIdentity(...
JobDetail jobDetail = JobBuilder.newJob(jobClass) .withIdentity(jobName, jobGroupName).build(); JobData jobData = new JobData(); jobData.setJobId(jobName); jobData.setJobName(jobName); jobDetail...