`
wbj0110
  • 浏览: 1611006 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Hadoop实现AbstractJob简化Job设置

阅读更多

在hadoop中编写一个job一般都是采用下面的方式:

 

[java] view plaincopy
 
  1. Job job=new Job();  
  2. job.setXxx();  
  3. ...  

这样感觉代码很多,而且参数还不好控制。比如,我想对输入的参数进行控制,还要自己写一些控制解析之类的代码,如下:

 

 

[java] view plaincopy
 
  1. if(args.length!=2){  
  2.     System.err.out("Usage<input> <output>")  
  3. }  

而且上面只是大概的判断下,没有很精确的判断。有没有比较好的方法可以不用设置,而且减少代码量呢?

 

其实可以实现Mahout中的AbstractJob类即可,如下:

 

[java] view plaincopy
 
  1. package mahout.fansy.bayes.transform;  
  2.   
  3. import org.apache.hadoop.conf.Configuration;  
  4. import org.apache.hadoop.fs.Path;  
  5. import org.apache.hadoop.io.LongWritable;  
  6. import org.apache.hadoop.io.Text;  
  7. import org.apache.hadoop.mapreduce.Job;  
  8. import org.apache.hadoop.mapreduce.Mapper;  
  9. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  
  10. import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;  
  11. import org.apache.hadoop.util.ToolRunner;  
  12. import org.apache.mahout.common.AbstractJob;  
  13. import org.apache.mahout.math.VectorWritable;  
  14.   
  15. public class TFText2VectorWritable extends AbstractJob {  
  16.   
  17.     @Override  
  18.     public int run(String[] args) throws Exception {  
  19.         addInputOption();  
  20.         addOutputOption();  
  21.         addOption("splitCharacter","sc""vector split character,default is ','"",");  
  22.         if (parseArguments(args) == null) {  
  23.               return -1;  
  24.             }  
  25.   
  26.         Path input = getInputPath();  
  27.         Path output = getOutputPath();  
  28.         String sc=getOption("splitCharacter");  
  29.         Job job=prepareJob(input,output,FileInputFormat.class,Mapper.class,LongWritable.class,Text.class,  
  30.                 null, Text.class,VectorWritable.class,SequenceFileOutputFormat.class);  
  31.         job.getConfiguration().set("sc", sc);  
  32.         if(job.waitForCompletion(true)){  
  33.             return 0;  
  34.         }  
  35.         return -1;  
  36.     }  
  37.   
  38.     /** 
  39.      *实现AbstractJob 
  40.      * @param args 
  41.      * @throws Exception  
  42.      */  
  43.     public static void main(String[] args) throws Exception {  
  44.         String[] arg=new String[]{"-i","safdf","-sc","scccccccc","-o","sdf"};  
  45.         ToolRunner.run(new Configuration(), new TFText2VectorWritable(),arg);  
  46.     }  
  47.   
  48. }  

如果你要添加自己的参数,可以直接在run方法中添加即可,比如上面笔者添加的splitCharacter参数,如果不输入参数,打印的信息如下:

 


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

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

http://blog.csdn.net/fansy1990

 
分享到:
评论

相关推荐

    使用hadoop实现WordCount实验报告.docx

    - **配置Hadoop环境变量**:编辑`hadoop-env.cmd`文件设置JAVA_HOME。 - **创建data文件夹**:创建namenode和datanode子文件夹。 - **修改配置文件**:更新`hdfs-site.xml`、`mapred-site.xml`和`yarn-site.xml`...

    Hadoop实现大矩阵乘法

    本主题聚焦于如何使用Hadoop实现大矩阵乘法,这是一个在计算机科学和数据分析中常见的运算,特别是在机器学习和数值计算中。在Hadoop上实现大矩阵乘法,可以充分利用其并行计算的优势,提高计算效率。 大矩阵乘法的...

    基于SSM框架和Hadoop实现的企业管理系统.zip

    基于SSM框架和Hadoop实现的企业管理系统 基于SSM框架和Hadoop实现的企业管理系统 基于SSM框架和Hadoop实现的企业管理系统 基于SSM框架和Hadoop实现的企业管理系统 基于SSM框架和Hadoop实现的企业管理系统 基于SSM...

    Hadoop MapReduce实现tfidf源码

    此外,还需要配置Job参数,如输入路径、输出路径、Mapper和Reducer类等,并提交Job到Hadoop集群执行。 压缩包中的"tfidf"文件可能是包含源代码、测试数据或者运行结果的文件。源代码可能包含了Mapper和Reducer的...

    基于Hadoop实现的数据云盘系统项目源码资料大全.zip

    基于Hadoop实现的数据云盘系统项目源码资料大全.zip基于Hadoop实现的数据云盘系统,实现不同用户有不同的存储空间,不同的用户身份有不同的权限操作等功能软件设计思路 1、用户登录模块设计 输入图片说明 2、检索...

    基于Hadoop实现的好友推荐系统源码+文档说明(毕业设计)

    基于Hadoop实现的好友推荐系统源码+文档说明(毕业设计)基于Hadoop实现的好友推荐系统源码+文档说明(毕业设计)基于Hadoop实现的好友推荐系统源码+文档说明(毕业设计)基于Hadoop实现的好友推荐系统源码+文档说明...

    大数据实验报告Hadoop编程实现wordcount单词统计程序附源码.doc

    大数据实验报告 Hadoop 编程实现 wordcount 单词统计程序附源码 本实验报告旨在介绍使用 Hadoop 编程实现 wordcount 单词统计程序的步骤和代码实现。实验的目的在于熟悉 Hadoop 虚拟机的安装与环境的配置,初步理解...

    win7下hadoop job提交

    3. **配置Hadoop**:修改Hadoop配置文件`hadoop-env.cmd`(在`conf`目录下),设置`JAVA_HOME`为JDK的安装路径。同时,根据你的网络环境,可能还需要修改`core-site.xml`和`hdfs-site.xml`文件,配置HDFS的默认名称...

    基于hadoop实现的疾病信息统计平台源代码+文档说明(毕业设计)

    基于hadoop实现的疾病信息统计平台源代码+文档说明(毕业设计)基于hadoop实现的疾病信息统计平台源代码+文档说明(毕业设计)基于hadoop实现的疾病信息统计平台源代码+文档说明(毕业设计)基于hadoop实现的疾病...

    基于hadoop实现的百度云盘.zip

    【标题】:“基于hadoop实现的百度云盘” 在当今大数据时代,分布式计算技术成为了处理海量数据的关键。Hadoop作为一款开源的分布式计算框架,因其高效、可扩展性以及容错性而广受青睐。本项目“基于hadoop实现的...

    基于java+BigData+hadoop实现的图书推荐系统源码+项目说明.zip

    基于java+BigData+hadoop实现的图书推荐系统源码+项目说明.zip基于java+BigData+hadoop实现的图书推荐系统源码+项目说明.zip基于java+BigData+hadoop实现的图书推荐系统源码+项目说明.zip基于java+BigData+hadoop...

    基于MapReduce+Hadoop实现的朴素贝叶斯分类项目源码(优秀课设).zip

    基于MapReduce+Hadoop实现的朴素贝叶斯分类项目源码(优秀课设).zip基于MapReduce+Hadoop实现的朴素贝叶斯分类项目源码(优秀课设).zip基于MapReduce+Hadoop实现的朴素贝叶斯分类项目源码(优秀课设).zip基于...

    hadoop实现聚类算法

    ### Hadoop 实现聚类算法 #### 一、引言 在大数据处理领域,Hadoop已经成为了一种不可或缺的工具。其核心组件包括分布式文件系统HDFS(Hadoop Distributed File System)和并行处理框架MapReduce。这些技术为数据...

    基于hadoop实现输出出现频率最高的20个词

    通过以上步骤,我们能够利用Hadoop MapReduce框架以及多Job级联的技术实现找出文本中出现频率最高的前N个词的目标。这种方法不仅适用于大规模数据集的处理,还能有效地提高数据处理的效率和准确性。此外,使用新API...

    Hadoop mapreduce实现wordcount

    在实际环境中,我们需要配置 Hadoop 集群,设置输入文件路径,编译并打包 WordCount 程序,最后通过 Hadoop 的 `hadoop jar` 命令提交作业到集群运行。调试时,可以查看日志输出,检查错误信息,优化性能。 通过...

    hadoop实现的网盘管理项目.zip

    hadoop实现的网盘管理项目,包括系统登录,增删改查,文件的上传下下载等功能 hadoop实现的网盘管理项目,包括系统登录,增删改查,文件的上传下下载等功能 hadoop实现的网盘管理项目,包括系统登录,增删改查,文件...

    hadoop源码解析-Job提交.pdf

    `totalMaps`变量设置为Job中的Map任务数量,`merger`对象负责合并来自不同MapTask的数据。ReduceTask的输入来自多个溢写文件,这些文件在内存不足以容纳更多数据时生成。`sorter.sort()`方法对这些文件进行排序,`...

    山东大学大数据实验二:倒排索引(Hadoop实现)

    这是山东大学大数据实验二,用Hadoop实现文档的倒排索引

Global site tag (gtag.js) - Google Analytics