Hadoop实现AbstractJob简化Job设置 博客分类: Hadoop Hadoop
程序员文章站
2024-03-18 08:02:27
...
在hadoop中编写一个job一般都是采用下面的方式:
- Job job=new Job();
- job.setXxx();
- ...
这样感觉代码很多,而且参数还不好控制。比如,我想对输入的参数进行控制,还要自己写一些控制解析之类的代码,如下:
- if(args.length!=2){
- System.err.out("Usage<input> <output>")
- }
而且上面只是大概的判断下,没有很精确的判断。有没有比较好的方法可以不用设置,而且减少代码量呢?
其实可以实现Mahout中的AbstractJob类即可,如下:
- package mahout.fansy.bayes.transform;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.io.LongWritable;
- import org.apache.hadoop.io.Text;
- import org.apache.hadoop.mapreduce.Job;
- import org.apache.hadoop.mapreduce.Mapper;
- import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
- import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
- import org.apache.hadoop.util.ToolRunner;
- import org.apache.mahout.common.AbstractJob;
- import org.apache.mahout.math.VectorWritable;
- public class TFText2VectorWritable extends AbstractJob {
- @Override
- public int run(String[] args) throws Exception {
- addInputOption();
- addOutputOption();
- addOption("splitCharacter","sc", "vector split character,default is ','", ",");
- if (parseArguments(args) == null) {
- return -1;
- }
- Path input = getInputPath();
- Path output = getOutputPath();
- String sc=getOption("splitCharacter");
- Job job=prepareJob(input,output,FileInputFormat.class,Mapper.class,LongWritable.class,Text.class,
- null, Text.class,VectorWritable.class,SequenceFileOutputFormat.class);
- job.getConfiguration().set("sc", sc);
- if(job.waitForCompletion(true)){
- return 0;
- }
- return -1;
- }
- /**
- *实现AbstractJob
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- String[] arg=new String[]{"-i","safdf","-sc","scccccccc","-o","sdf"};
- ToolRunner.run(new Configuration(), new TFText2VectorWritable(),arg);
- }
- }
如果你要添加自己的参数,可以直接在run方法中添加即可,比如上面笔者添加的splitCharacter参数,如果不输入参数,打印的信息如下:
红色方框里面的内容,即是设置的参数;
同时调用prepareJob方法可以简化Job的参数设置。比如设置Mapper、MapperOutPutKey等等都要一行代码,现在全部只需一行即可;如果要设置参数以供Mapper和Reducer中使用,可以使用job.getConfiguration().set("sc", sc)来进行设置。
http://blog.csdn.net/fansy1990
推荐阅读
-
Hadoop实现AbstractJob简化Job设置 博客分类: Hadoop Hadoop
-
hadoop用Quorum Journal Manager(QJM)实现高可用 博客分类: 大数据hadoop
-
MapReduce二次排序实现 博客分类: hadoop hadoop排序
-
32位hadoop编译实现与64位操作系统兼容 博客分类: 自学记录HaDoop学习笔记 hadop编译mavengcc
-
Hadoop YARN中内存的设置 博客分类: 大数据 hadoop
-
Hadoop YARN中内存的设置 博客分类: 大数据 hadoop
-
hadoop客户端提交job的java代码 博客分类: java
-
hadoop客户端提交job的java代码 博客分类: java
-
hadoop JOB的性能优化实践 博客分类: 数据挖掘&机器学习
-
hadoop JOB的性能优化实践 博客分类: 数据挖掘&机器学习