在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
相关推荐
基于SSM框架和Hadoop实现的企业管理系统 基于SSM框架和Hadoop实现的企业管理系统 基于SSM框架和Hadoop实现的企业管理系统 基于SSM框架和Hadoop实现的企业管理系统 基于SSM框架和Hadoop实现的企业管理系统 基于SSM...
用Hadoop实现的大矩阵乘法,包括代码设计思路以及可以执行的源代码。已在hadoop-1.0.3平台测试通过,对初学者是很好的材料。
使用hadoop实现WordCount详细实验报告,配有环境变量配置截图以及实验运行及结果详细过程描述与截图
基于Hadoop实现的数据云盘系统项目源码资料大全.zip基于Hadoop实现的数据云盘系统,实现不同用户有不同的存储空间,不同的用户身份有不同的权限操作等功能软件设计思路 1、用户登录模块设计 输入图片说明 2、检索...
Hadoop mapreduce 实现KMeans,可用
基于java+BigData+hadoop实现的图书推荐系统源码+项目说明.zip基于java+BigData+hadoop实现的图书推荐系统源码+项目说明.zip基于java+BigData+hadoop实现的图书推荐系统源码+项目说明.zip基于java+BigData+hadoop...
hadoop实现聚类算法 利用MapReduce框架和HDFS来实现快速聚类
hadoop源码解析-Job提交.pdf
win7下hadoop job提交
用MapReduce实现TF-IDF,Hadoop版本是2.7.7,参考某教程亲自手写的,可以运行,有问题可以留言
hadoop实现的网盘管理项目,包括系统登录,增删改查,文件的上传下下载等功能 hadoop实现的网盘管理项目,包括系统登录,增删改查,文件的上传下下载等功能 hadoop实现的网盘管理项目,包括系统登录,增删改查,文件...
这是山东大学大数据实验二,用Hadoop实现文档的倒排索引
java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,...
Hadoop mapreduce 实现MR_DesicionTreeBuilder 决策树
Hadoop 用mapreduce实现Wordcount实例,绝对能用
大数据实验报告Hadoop编程实现wordcount单词统计程序附源码.doc
大数据(bigdata)中,Hadoop如何处理提交的作业(Job),本课件深入分析,一目了然。
基于Hadoop的电影推荐系统的设计与实现源码(毕业设计)java+Hadoop,使用Hadoop2.7,jdk1.8;分为前台,后台和推荐三个子系统,可直接运行。sql私信
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1296) at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1293) at java.security.AccessController.doPrivileged(Native Method) at javax....