我需要实现以下功能:
public void CreateMRJob(String jobInputLocation, String jobJarLocation);
这可能看起来相当简单,而且是一个重复的问题,但是我想在一个单独的文件(wpmapreduce.java,如下所附)中执行作业的初始化,因为用户可以编辑其中的某些部分。当我说在一个单独的文件中初始化作业时,我的意思是:
// WPMapReduce.java
public class WPMapReduce {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "WPMapReduce");
job.setSpeculativeExecution(false);
job.setReduceSpeculativeExecution(false);
job.setJarByClass(WPMapReduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setNumReduceTasks(1);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setSpeculativeExecution(false);
job.setReduceSpeculativeExecution(false);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.waitForCompletion(true);
}
}
我不确定如何将jar文件设置为要运行的作业,然后从另一个文件中的createmrjob函数运行该作业。
p、 我是hadoop的新手,我可能会假设很多事情。
2条答案
按热度按时间yqlxgs2m1#
执行此操作的一种方法是使用java中的runtime.exec()创建子进程,以访问命令行(linux或mac中的终端或windows中的cmd),然后设置参数并运行作业。输出文件可以存储数据,而您可以创建一个管道,以便在作业运行时从作业流式传输数据。
pes8fvy92#
我认为您不必使用main创建一个单独的类,您可以拥有一个mrsetup类,在该类中,您可以读取带有所需参数的配置(属性)文件并准备对象。可以在mr driver作业类中使用相同的对象。