MapReduce

MapReduce应用案例

http://blog.csdn.net/lilianforever/article/details/51871944
1.统计文件中单词的频率
2.数据去重,去掉重复出现的数据
3.数据排序,对输入的数据按照一定顺序排列
4.单表关联,要求从给出的数据中寻找所关心的数据
http://www.cnblogs.com/shishanyuan/p/4646654.html
5.求各个部门的总工资
6.求各个部门的人数和平均工资
7.求每个部门最早进入公司的员工姓名
8.求各个城市的员工的总工资
9.列出工资比上司高的员工姓名及其工资
10.列出工资比公司平均工资要高的员工姓名及其工资
11.列出名字以J开头的员工姓名及其所属部门名称
12.列出工资最高的头三名员工姓名及其工资
13.将全体员工按照总收入(工资+提成)从高到低排列

首先给出一个问题:如何实现多个文件的词频统计?

  • 方法一:在单机上,顺序遍历所有文件,统计每个单词出现的次数。
  • 方法二:为了加快处理速度,在单机上,并行处理程序:将任务等大小划分给不同线程,每个线程处理自己的任务,最后合并各个独立进程的运行结果,再进行处理。
  • 方法三:有个单个机器处理能力有限,所以有第三种方法:利用Hadoop的多个机器并行处理优势,即MapReduce。
一、MapReduce介绍

MapReduce是一种用来处理数据的编程模型,它的优势在于处理大规模数据集。MapReduce任务分为两个阶段:map阶段和reduce阶段。每个阶段都以键值对<key,value>作为输入和输出。作为开发者,需要写两个函数:map函数和reduce函数。

MapReduce执行流程描述:
  • Hadoop将MapReduce的输入数据划分成等长的小数据块,称为输入分片(input split)。每个分片对应一个map任务,并由该任务来运行用户自定义的map函数来处理分片中的每条记录。一个合理的分片大小趋向于HDFS的一个块的大小(64M/128M/256M等),Hadoop在存储有输入数据的节点上运行map任务,可以获得最佳性能,也就是“数据本地化优化”,它无需使用集群带宽资源。map任务将其输出写入本地磁盘,而非HDFS。

  • 每个map任务会针对输出进行分区(partition),即为每个reduce任务建一个分区。每个分区有许多键值对,但每个键对应的键值对记录都在同一个分区。分区由用户定义的partiton函数控制。

  • map任务和reduce任务之间的数据流称为shuffle(混洗),因为每个reduce任务的输入来自许多map任务,调整混洗参数对作业总执行时间的影响非常大。

  • map输出通过网络传输发送到运行reduce任务的节点,数据在reduce端合并,然后由用户定义的reduce函数处理,reduce的输出通常存储在HDFS中以实现可靠存储。


    1.png
问题:combiner、partition、shuffle?
二、MapReduce工作机制
  • 1.经典的MapReduce(MapReduce 1)
  • 2.YARN(MapReduce 2)
MapReduce 1

推荐阅读更多精彩内容