你好,游客 登录 注册 搜索
背景:
阅读新闻

Hadoop实现AbstractJob简化Job设置

[日期:2013-09-10] 来源:Linux社区  作者:fansy1990 [字体: ]

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参数,如果不输入参数,打印的信息如下:

Hadoop实现AbstractJob简化Job设置

红色方框里面的内容,即是设置的参数;

同时调用prepareJob方法可以简化Job的参数设置。比如设置Mapper、MapperOutPutKey等等都要一行代码,现在全部只需一行即可;如果要设置参数以供Mapper和Reducer中使用,可以使用job.getConfiguration().set("sc", sc)来进行设置。

相关阅读:

《Hadoop实战》中文版+英文文字版+源码【PDF】 http://www.linuxidc.com/Linux/2012-10/71901.htm

Hadoop: The Definitive Guide【PDF版】 http://www.linuxidc.com/Linux/2012-01/51182.htm

更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

linux
相关资讯       Hadoop Job 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款