首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

浅谈MapReduce编程1

2012-08-25 
浅谈MapReduce编程一一、MapReduce程序一般通过键值对的形式来处理数据???? Map:(K1,V1)-----List(K2,V2)

浅谈MapReduce编程一

一、MapReduce程序一般通过键值对的形式来处理数据

????

 Map:(K1,V1)----->List(K2,V2) Reduce:(K2,List(V2))------>List(K3,V3)

?

?

二、数据流动

???????1、?输入数据通过split的方式,被分发到各个节点上

???????2、每个Map任务在一个split上面进行处理。

???????3、Mapper任务输出中间数据

???????4、在组合过程中(shuffle),节点之间进行数据交换

???????5、拥有同样key值的中间数据(键值对)被送到同样的reducer任务中

???????6、reduce执行任务后,输出结果。

???????注意前四步为Map过程,后两步为Reduce过程

三、MapReduce程序使用的数据类型

????????由于MapReduce框架需要将数据在集群中进行移动,所以框架定义了一种序列化的键值对类型,即keys和values必须能够进行序列化。所以实现了Writable接口的对象可以充当values,实现了WritableComparalbe<T>接口的对象可以充当keys或values

?????Hadoop中实现了WritableComparable<T>接口的类有如下几个:

?????

BooleanWritable、ByteWritable、DoubleWritable、FloatWritable、IntWritable、LongWritable、Text、NullWritable。

?

?

四:Mapper

????????Hadoop中的mapper,.必须实现Mapper接口并且继承MapReduceBase类,??MapReduceBase类是mappers和reduces类的基类,它包含了构造方法和析构方法。

void?configure(JobConf?job):提取配置文件或程序中设置的参数值

void?close()?:任务是关闭数据库连接,关闭文件等等

Mapper接口中map函数的原型

Void map(K1 key,V1 value,OutputCollector<K2,V2> output,Reporter reporter) throws IOException

?

?

?

?

Hadoop中实现的Mapper接口的常用类

IdentityMapper<K,V>:?实现了Mapper<K,V,K,V>?,直接将map的输入转换为输出。

InverseMapper<K,V>??实现了Mapper<K,V,V,K>,反转键值对。

RegexMapper<K>????实现了Mapper<K,TEXT,TEXT,LongWritable>,为每一个匹配的正则表达式生成一个(match,1)键值对

TokenCountMapper<K>?实现了Mapper<K,TEXT,TEXT,LongWritable>,当输入值被标记,那么生成一个(token,1)键值对

五、Reducer

???????Hadoop中的mapper,.必须实现Reducer接口并且继承MapReduceBase类?

????????Reducer接口中reduce方法的原型为:

?????

void reduce(K2,key,Iterator<V2> values,                  OutputCollector<K3,V3> output,Reporter reporter) throws IOException

??

?

??????Reducer任务接口接收到许多mapper任务传来的数据,首先将数据进行排序,然后根据key值进行分组,最后调用reduce方法

Hadoop中实现的Reducer接口的常用类

IdentityReducer<K,V>:直接将输入转换为输出

LongSumReducer<K>?实现了Reducer<K,LongWritable,K,LongWritable>?,对于同样的key值进行value值的相加。

<!--EndFragment-->

热点排行