在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环境变量**:编辑`hadoop-env.cmd`文件设置JAVA_HOME。 - **创建data文件夹**:创建namenode和datanode子文件夹。 - **修改配置文件**:更新`hdfs-site.xml`、`mapred-site.xml`和`yarn-site.xml`...
本主题聚焦于如何使用Hadoop实现大矩阵乘法,这是一个在计算机科学和数据分析中常见的运算,特别是在机器学习和数值计算中。在Hadoop上实现大矩阵乘法,可以充分利用其并行计算的优势,提高计算效率。 大矩阵乘法的...
基于SSM框架和Hadoop实现的企业管理系统 基于SSM框架和Hadoop实现的企业管理系统 基于SSM框架和Hadoop实现的企业管理系统 基于SSM框架和Hadoop实现的企业管理系统 基于SSM框架和Hadoop实现的企业管理系统 基于SSM...
此外,还需要配置Job参数,如输入路径、输出路径、Mapper和Reducer类等,并提交Job到Hadoop集群执行。 压缩包中的"tfidf"文件可能是包含源代码、测试数据或者运行结果的文件。源代码可能包含了Mapper和Reducer的...
基于Hadoop实现的数据云盘系统项目源码资料大全.zip基于Hadoop实现的数据云盘系统,实现不同用户有不同的存储空间,不同的用户身份有不同的权限操作等功能软件设计思路 1、用户登录模块设计 输入图片说明 2、检索...
大数据实验报告 Hadoop 编程实现 wordcount 单词统计程序附源码 本实验报告旨在介绍使用 Hadoop 编程实现 wordcount 单词统计程序的步骤和代码实现。实验的目的在于熟悉 Hadoop 虚拟机的安装与环境的配置,初步理解...
3. **配置Hadoop**:修改Hadoop配置文件`hadoop-env.cmd`(在`conf`目录下),设置`JAVA_HOME`为JDK的安装路径。同时,根据你的网络环境,可能还需要修改`core-site.xml`和`hdfs-site.xml`文件,配置HDFS的默认名称...
【标题】:“基于hadoop实现的百度云盘” 在当今大数据时代,分布式计算技术成为了处理海量数据的关键。Hadoop作为一款开源的分布式计算框架,因其高效、可扩展性以及容错性而广受青睐。本项目“基于hadoop实现的...
基于java+BigData+hadoop实现的图书推荐系统源码+项目说明.zip基于java+BigData+hadoop实现的图书推荐系统源码+项目说明.zip基于java+BigData+hadoop实现的图书推荐系统源码+项目说明.zip基于java+BigData+hadoop...
基于MapReduce+Hadoop实现的朴素贝叶斯分类项目源码(优秀课设).zip基于MapReduce+Hadoop实现的朴素贝叶斯分类项目源码(优秀课设).zip基于MapReduce+Hadoop实现的朴素贝叶斯分类项目源码(优秀课设).zip基于...
### Hadoop 实现聚类算法 #### 一、引言 在大数据处理领域,Hadoop已经成为了一种不可或缺的工具。其核心组件包括分布式文件系统HDFS(Hadoop Distributed File System)和并行处理框架MapReduce。这些技术为数据...
通过以上步骤,我们能够利用Hadoop MapReduce框架以及多Job级联的技术实现找出文本中出现频率最高的前N个词的目标。这种方法不仅适用于大规模数据集的处理,还能有效地提高数据处理的效率和准确性。此外,使用新API...
在实际环境中,我们需要配置 Hadoop 集群,设置输入文件路径,编译并打包 WordCount 程序,最后通过 Hadoop 的 `hadoop jar` 命令提交作业到集群运行。调试时,可以查看日志输出,检查错误信息,优化性能。 通过...
hadoop实现的网盘管理项目,包括系统登录,增删改查,文件的上传下下载等功能 hadoop实现的网盘管理项目,包括系统登录,增删改查,文件的上传下下载等功能 hadoop实现的网盘管理项目,包括系统登录,增删改查,文件...
`totalMaps`变量设置为Job中的Map任务数量,`merger`对象负责合并来自不同MapTask的数据。ReduceTask的输入来自多个溢写文件,这些文件在内存不足以容纳更多数据时生成。`sorter.sort()`方法对这些文件进行排序,`...
这是山东大学大数据实验二,用Hadoop实现文档的倒排索引
java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,...
在这个场景中,我们将探讨如何使用Java编程语言在Hadoop环境下实现一个基础但重要的任务——Wordcount。这个任务涉及到对文本数据的预处理、分词、以及对单词的计数。 首先,我们要理解Hadoop的MapReduce编程模型。...