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 ...
随机推荐
- Unity 事件2
UIMouseEvent.cs: using UnityEngine; using System; public abstract class UIMouseEvent : MonoBehaviour ...
- KineticJS教程(8)
KineticJS教程(8) 作者: ysm 8.动画 动画就是一帧帧的画面按照时间间隔显示出来,Kinetic给我们提供了一个舞台对象的onFrame方法,用这个方法可以绑定一个动画方法,我们要显 ...
- 全栈project师体能备战--知识面(10--20)
WCF Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,能够翻译为Windows 通讯开发平台. 对于 WCF 的client ...
- OSI模型图文说明
网关工作在第四层传输层及其以上 网络层:路由器 数据链路层:网桥,交换机 物理层:网卡,网线,集线器,中继器,调制解调器 OSI共7层:应用层,表示层,会话层,传输层,数据链路层,物理层. [7]:应 ...
- linux内核——进程切换宏switch_to
该宏有三个参数:prev, next, last.它们都是局部变量. prev:输入参数,变量值为旧进程描述符的地址. next:输入参数,变量值为新进程描述符的地址. last:输出参数,用来记录该 ...
- asp.net MVC 视图文件(cshtml/vbhtml)变更编译过程示范
更改cshtml文件的时候 并不会触发程序重新启动,而是进入了编译状态 csc.exe进程启动. 非阻塞的方式进行等待,延时等待. 示范程序:http://pan.baidu.com/s/1skDY ...
- SpringMVC与SiteMesh
SpringMVC与SiteMesh2.4无缝整合并借助JSR303规范实现表单验证 SiteMesh3.0的下载,简介与使用 总结: springmvc结合sitemesh总共分三步: 1.添加si ...
- 【jQuery获取下拉框select、单选框radio、input普通框的值和checkbox选中的个数】
radio单选框:name属性相同 <input type="radio" id="sp_type" name="p_type" va ...
- PHP-Windows下搭建Nginx+PHP环境
项目中光用Nginx了, 由于有运维人员, 很少搭建Nginx服务器, 开发也就用用Apache, 搭过几次Nginx也忘的快, 每次都去翻别人博客, 今天重搭特此记录, 装前最好了解下FastCGI ...
- C#DirectX播放视频
文章地址:http://www.cnblogs.com/zhangjun1130/archive/2009/09/15/1566814.html 很多人第一次接触到DirectX大都是通过游戏,至于安 ...