mapreduce程序调用各个类的功能
转自:http://www.cnblogs.com/z1987/p/5052409.html
1、map类
map类继承了库类中的Mapper,即Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>。通常map类中会重写map方法,map每次只接受一个key-value,然后对其进行预处理,再分发出处理后的数据。其map方法为:
protected void map(Object key, Value value, Context context)
throws IOException, InterruptedException{
context.write((KEYOUT) key, (VALUEOUT) value);
}
2、Reducer类
Reducer类继承了类库中的Reducer,原型为Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT>,reduce类除了reduce方法不一样外,其他跟map均一样,功能也相同。其reduce方法为:
protected void reduce(Text key, Interable<InterWrite> values, Context context)
throws IOException, InterruptedException {
for(Interable<IntWritable> value: values) {
context.write(Text key, IntWritable value;
}
}
3、mapreduce驱动
简单来说就是Main函数中的代码,一般情况下包括:

Configuration conf = new Configuration();
//获取输入输出文件路径
String[] otherArgs = new GenericOptionsParser(conf,args).getRemainingArgs();
if(otherArgs.length != 2){
System.err.println("Usage WordCount <int> <out>");
System.exit(2);
}
Job job = new Job(conf,"Dedup");
job.setJarByClass(Dedup.class); //主类
job.setMapperClass(Map.class); //map类
job.setCombinerClass(Reduce.class); //job合成类
job.setReducerClass(Reduce.class); //reduce类
job.setOutputKeyClass(Text.class); //设置job输出数据的key类
job.setOutputValueClass(Text.class); //设置job输出数据的value类
FileInputFormat.addInputPath(job, new Path(otherArgs[0])); //文件输入
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); //文件输出
System.exit(job.waitForCompletion(true) ? 0 : 1);
}

其实这里还包括一个maprecude最小驱动即之调用MiniMapReduceDriver类,
Job job = new Job(conf,"Dedup");
job.setJarByClass(Dedup.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
4、InputFormat接口
InputFormat类的层次结构如下所示。TextInputFormat是InputFormat的默认实现方式,对输入数据中没有明确key-value时很有效,其返回的key表示这行数据的偏移量,value为行的内容。

5、InputSplit类
默认情况下,FileInputFormat及其子类以64MB(建议Split大小与此相同)为基数拆分文件。通过以块形式处理文件,可以让多个Map任务并行地操作一个文件。对于大文件,就会极大提升性能。map的输入是一个个的输入分片,即为InputSplits。
InputSplit的子类有FileSplit和CombineFileSplit。两者均包含文件路径、分片开始位置、分片大小、存储分片数据的host列表。但CombineFileSplit是针对小文件,其将很多小文件包在一个InputSplit内,这样就能处理很多小文件了。
针对某些文件不可切分,则可通过两种方式完成,第一种为将文件最小分片大小设置为大于文件大小,第二种方法为使用FileInputFormat的子类,并重载isSplitable方法,把返回值设置为false。
6、RecordReader类
InputSplit定义了如何切分工作,RecordReader类则定义了如何加载数据并转换为适合map方法读取的key-value对。其默认输入格式为TextInputFormat。
7、OutputFormat类
与InputFormat相似,其大多数继承自FileOutFormat,但NullOutputFormat和DBOutputFormat除外。其默认格式为TextOutputFormat。OutputFormat提供了对RecordWriter的实现,从而指定如何序列化数据。RecordWriter类可以处理包含单个键值对的作业,并将结果写入OutputFormat已准备好的位子中。RecordWriter主要通过write和close两个函数实现。write函数从MapReduce作业中取出键值对,并将其字节写入磁盘。close函数会关闭hadoop到输出文件的数据流。
OutputFormat的层次结构图如下:

8、RecordWriter类
LineRecordWriter是默认使用的RecordWriter,写入内容包括:key的字节,一个用以定界的制表符,value的字节,一个换行符。
mapreduce程序调用各个类的功能的更多相关文章
- 记录使用微信小程序的NFC和蓝牙功能读取15693芯片的开发历程
开发目标: (1) 对于Android手机,直接通过微信小程序调用手机的NFC功能,对15693协议的芯片进行读写操作: (2)对于苹果手机(及没有NFC模块的手机),通过微信小程序的蓝牙功能连接到蓝 ...
- 经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能
说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后, ...
- C#程序调用CodeSoft预先设计好的标签模块实现打印功能
if (this.tbSetLabel.Text.Trim() == "") { MessageBox.Show("请先 Enter 选择标签模板文件!", & ...
- 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...
- C# 如何利用反射来加载程序集,并调用程序集中有关类的方法【转】
假设在C盘根目录下有个Dog的Dll程序集文件,该程序集文件中包含类Dog 该类中有个狗叫几声的方法,如何通过反射来加载这个C:\Dog.dll,并且调用Dog类里面的Sound方法呢: public ...
- 微信小程序wx.showActionSheet调用客服信息功能
微信小程序wx.showActionSheet调用客服消息功能 官方文档的代码: wx.showActionSheet({ itemList: ['A', 'B', 'C'], success (re ...
- 微信小程序调用用百度地图天气功能
#小程序之调用百度地图天气功能 本篇博客主要介绍小程序在百度地图中获取天气信息,如有不全请指出.下面先上效果图 主要内容 百度地图API的个人密钥,也就是AK 请求百度地图API接口数据 获取到的信息 ...
- Windows平台开发Mapreduce程序远程调用运行在Hadoop集群—Yarn调度引擎异常
共享原因:虽然用一篇博文写问题感觉有点奢侈,但是搜索百度,相关文章太少了,苦苦探寻日志才找到解决方案. 遇到问题:在windows平台上开发的mapreduce程序,运行迟迟没有结果. Mapredu ...
- 通过异步程序调用(APC)实现的定时功能
定时器是一个在特定时间或者规则间隔被激发的内核对象.结合定时器的异步程序调用可以允许回调函数在任何定时器被激发的时候执行.本文的例子代码显示了如何实现. 使用本定时器时,你需要把常量_WIN32_WI ...
随机推荐
- PHP如何安装和配置Zend Studio
1 网上下载该软件,安装之后关闭三个东西 2 新建一个本地的PHP项目 3 展开左侧的资源树,发现多了一个PHP的相关东西 4 右击"基础知识",新建一个PHP文件并输入以下代码 ...
- 探寻不同版本号的SDK对iOS程序的影响
PDF版本号:http://pan.baidu.com/s/1eQ8DVdo 结论: 同样的代码.使用不同版本号的SDK来编译.会影响MachO头中的值, 从而使程序表现出不同的外观. 代码: - ( ...
- Python模块学习 ---- logging 日志记录
许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4cp ...
- volist 自增序号 分页如何实现?
TP框架模板中如何生成自增数据 {$_GET['p']*10-10+$i} /* 分页序号计算 */ function addnum($k,$num){ return ($k +1 ) ...
- JavaScript严格模式下this指向
一般认为:严格模式下this不允许指向全局对象.是函数体是否处于严格模式! 如:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mod ...
- iOS 烟花撒花效果,图层渐变,图层倒影特效。CAEmitterLayer粒子发射器
iOS 烟花撒花效果,图层渐变,图层倒影特效.CAEmitterLayer粒子发射器 上一节我写了一个关于视图图层的相关类,有关CALayer这个类的使用和一些使用方法,详细看这里,就是我们在处理视图 ...
- Mybatis解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- JDBC 增删改查代码 过滤查询语句
package test; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; i ...
- 【小程序】微信小程序打开其他小程序(打开同一主体公众号下关联的另一个小程序)
微信小程序打开其他小程序(打开同一公众号下关联的另一个小程序) 注:只有同一(主体)公众号下的关联的小程序之间才可相互跳转 wx.navigateToMiniProgram(OBJECT) wx.n ...
- C3P0连接参数解释
<c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> < ...