浅谈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框架需要将数据在集群中进行移动,所以框架定义了一种序列化的键值对类型,即keysvalues必须能够进行序列化。所以实现了Writable接口的对象可以充当values,实现了WritableComparalbe<T>接口的对象可以充当keysvalues

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

     

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

 

 

四:Mapper

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

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-->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值