浅谈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-->