MapReduce编程规范及示例编写

本文详细介绍了MapReduce的编程规范,包括八个步骤的总体流程,从InputFormat到outputFormat的详细过程。同时,讲解了Mapper和Reducer抽象类的使用,以及WordCount示例,帮助开发者理解如何在MapReduce中进行数据处理和任务提交。
摘要由CSDN通过智能技术生成

一、编程规范

mapReduce编程模型的总结

事实上MapReduce的开发一共有八个步骤其中map阶段分为2个步骤,shuffle阶段4个步骤,reduce阶段分为2个步骤

  1. Map 阶段步骤
    第一步:设置inputFormat类,将数据切分成key,value对,输入到第二步
    第二步:自定义map逻辑,处理第一步的输入数据,然后转换成新的key,value对进行输出
    在这里插入图片描述
  2. shuffle阶段4个步骤(可以全部不用管)
    第三步:对输出的key,value对进行分区。相同key的数据发送到同一个reduce里面去,相同key合并,value形成一个集合
    第四步:对不同分区的数据按照相同的key进行排序
    第五步:对分组后的数据进行规约(combine操作),降低数据的网络拷贝(可选步骤)
    第六步:对排序后的额数据进行分组,分组的过程中,将相同key的value放到一个集合当中
    在这里插入图片描述
  3. reduce阶段2个步骤
    第七步:对多个map的任务进行合并,排序,写reduce函数自己的逻辑,对输入的key,value对进行处理,转换成新的key,value对进行输出
    第八步:设置outputformat将输出的key,value对数据进行保存到文件中
    在这里插入图片描述

八个步骤总体流程

在这里插入图片描述

MapReduce从读取数据开始到将最终结果写入HDFS经过步骤

第一步:InputFormat
InputFormat 在HDFS文件系统中读取要进行计算的数据
输出给Split
第二步:Split
Split 将数据进行逻辑切分,切分成多个任务。
输出给RR
第三步:RR
RR 将切分后的数据转换成key value进行输出
key : 每一行行首字母的偏移量
value: 每一行数据
输出给Map
第四步:Map
接收一条一条的数据(有多少行数据Map运行多少次,输出的次数根据实际业务需求而定)
根域业务需求编写代码
Map的输出是 key value的 list
输出给Shuffle(partition)
---------------------------------------Map-------------------------------------------------------
第五步: partition
partition: 按照一定的规则对 **key value的 list进行分区
输出给Shuffle(sort)
第六步:Sort
Sort :对每个分区内的数据进行排序。
输出给Shuffle(Combiner)
第七步:Combiner
Combiner: 在Map端进行局部聚合(汇总)
目的是为了减少网络带宽的开销
输出给Shuffle(Group)
第八步:Group
Group: 将相同key的key提取出来作为唯一的key
将相同key对应的value提取出来组装成一个value 的List
输出给Shuffle(reduce)
------------------------------------Shuffle--------------------------------------------
第九步:reduce
reduce: 根据业务需求对传入的数据进行汇总计算。
输出给Shuffle(outputFormat)
第十步:outputFormat
outputFormat:将最终的额结果写入HDFS
------------------------------------reduce--------------------------------------------

二、编程实例

Mapper以及Reducer抽象类介绍

为了开发MapReduce程序,一共可以分为以上八个步骤,其中每个步骤都是一个class类,通过job对象将程序组装成一个任务提交即可。为了简化MapReduce程序的开发,每一个步骤的class类,都有一个既定的父类,直接继承即可,因此可以大大简化MapReduce程序的开发难度,也可以快速的实现功能开发。
MapReduce编程当中,其中最重要的两个步骤就是Mapper类和Reducer类

1、 Mapper抽象类的基本介绍

在hadoop2.x当中Mapper类是一个抽象类,工程师只需要覆写一个java类,继承自Mapper类即可,然后重写里面的一些方法,就可以实现特定的功能,接下来介绍一下Mapper类当中比较重要的四个方法

  1. setup方法:
    Mapper类当中的初始化方法,程序中一些对象的初始化工作都可以放到这个方法里面来实现
  2. map方法:
    读取的每一行数据,都会来调用一次map方法,这个方法也是最重要的方法,可以通过这个方法来实现每一条数据的处理。
  3. cleanup方法:
    在整个maptask执行完成之后,会马上调用cleanup方法,这个方法主要是做一些清理工作,例如连接的断开,资源的关闭等等
  4. run方法:
    如果需要更精细的控制整个MapTask的执行,那么可以覆写这个方法,实现对所有的MapTask更精确的操作控制
2、Reducer抽象类基本介绍

同样的道理,在hadoop2.x当中,reducer类也是一个抽象类,抽象类允许工程师可以继承这个抽象类之后,重新覆写抽象类当中的方法,实现逻辑的自定义控制。接下来也来介绍一下Reducer抽象类当中的四个抽象方法

  1. setup方法:
    在ReduceTask初始化之后马上调用,一些对象的初始化工作,可以在这个类当中实现
  2. reduce方法:
    所有从MapTask发送过来的数据,都会调用reduce方法,这个方法也是reduce当中最重要的方法,可以通过这个方法实现数据的处理
  3. cleanup方法:
    在整个ReduceTask执行完成之后,会马上调用cleanup方法,这个方法主要就是在reduce阶段做一些清理工作,例如连接的断开,资源的关闭等等
  4. run方法:
    如果需要更精细的控制整个ReduceTask的执行,那
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值