在Apache Hadoop中使用job.waitForCompletion(true)方法和通过ToolRunner.run(new MyClass(),args)启动map reduce作业有什么区别?
我通过以下两种方式执行MapReduce作业:
首先如下:
public class MaxTemperature extends Configured implements Tool {
public static void main(String[] args) throws Exception {
int exitCode = ToolRunner.run(new MaxTemperature(), args);
System.exit(exitCode);
}
@Override
public int run(String[] args) throws Exception {
if (args.length != 2) {
System.err.println("Usage: MaxTemperature <input path> <output path>");
System.exit(-1);
}
System.out.println("Starting job");
Job job = new Job();
job.setJarByClass(MaxTemperature.class);
job.setJobName("Max temperature");
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setMapperClass(MaxTemperatureMapper.class);
job.setReducerClass(MaxTemperatureReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
int returnValue = job.waitForCompletion(true) ? 0:1;
if(job.isSuccessful()) {
System.out.println("Job was successful");
} else if(!job.isSuccessful()) {
System.out.println("Job was not successful");
}
return returnValue;
}
}
其次是:
public class MaxTemperature{
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.err.println("Usage: MaxTemperature <input path> <output path>");
System.exit(-1);
}
System.out.println("Starting job");
Job job = new Job();
job.setJarByClass(MaxTemperature.class);
job.setJobName("Max temperature");
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setMapperClass(MaxTemperatureMapper.class);
job.setReducerClass(MaxTemperatureReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
int returnValue = job.waitForCompletion(true) ? 0:1;
if(job.isSuccessful()) {
System.out.println("Job was successful");
} else if(!job.isSuccessful()) {
System.out.println("Job was not successful");
}
}
两种方法的输出都是一样的。但是我不明白这两种方法有什么区别?哪一种比另一种更受欢迎?
这篇文章在解释工具运行器的使用方面做得相当不错:工具运行器
我有两个不同的工作(实际上更多,但为了简单起见,假设2)。每个作业可以与另一个作业并行运行,但同一作业的每个实例应该顺序运行(否则实例将共享彼此的资源)。 基本上,我希望这些作业中的每一个都有自己的作业实例队列。我想我可以使用两个不同的线程池作业启动程序(每个都有一个线程),并将一个作业启动程序与每个作业相关联。 在从Spring Batch Admin web UI中启动作业时,是否有一种方法可
我一直在通过PuTTy登录到SSH来运行Hadoop MapReduce作业,这要求我在PuTTy中输入主机名/IP地址、登录名和密码,以获得SSH命令行窗口。进入SSH控制台窗口后,我将提供适当的MR命令,例如: hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.0.0-mr1-cdh4.
我试图运行WordCount示例的一个变体,这个变体是,映射器输出文本作为键和文本作为值,而还原器输出文本作为键和NullWritable作为值。 除了地图,减少签名,我把主要的方法是这样的:
我是Hadoop的MapReduce的新手。我已经编写了一个map-reduce任务,我正在尝试在本地计算机上运行它。但这项工作在地图绘制完成后就悬而未决了。 下面是代码,我不明白我错过了什么。 我有一个自定义密钥类 使用自定义键的映射器和缩减器类如下。 我还在main中创建了一个作业和配置。不知道我错过了什么。我在本地环境下运行这一切。
我得和Spring批处理问题。都与通过命令行传入的JobParameters有关。 第一期: 为了从JobParameters获取路径,我使用BeforeStep注释加载JobParameters并将它们复制到局部变量上。不幸的是,这不起作用。变量将为并且执行失败,因为文件无法打开。 如何访问读取器中的作业参数?我想将文件路径作为命令行参数传入,然后读取这个文件。
我有一个用Spring Boot(1.4.1.Release)开发的Spring批处理作业。 它成功地从命令行运行,并将作业执行数据写入MySQL。它在Spring Batch Admin(2.0.0.M1,指向MySQL)中显示为不可启动的作业,我可以看到作业执行度量。 我想知道以前有没有人这样做过。文档中有一节添加您自己的启动作业。但是它没有指定在哪里为作业添加实现jar? 是spring-b