2 MapReduce

1.MapReduce概述

1.设计理念

Paste_Image.png

把代码拷贝到节点上,而不是拷贝数据。

2.计算框架

2 MapReduce_第1张图片
Paste_Image.png

数据来源于HDFS的block。

2 MapReduce_第2张图片
Paste_Image.png

解读:图为统计文本中单词出现次数

  • 一共4个步骤:spliting/mapping/shuffing/reducing
  • split把输入文件分割(但不一定是按行分割)
  • map从split的结果取出单词,单词为键,值为1,形成键值对的形式
  • shuffling把相同的单词合并
  • reduce把结果汇总,值相加(reduce也可能只有一个,汇总时先统计Bear,再统计Car……)

3.Shuffler

2 MapReduce_第3张图片
Paste_Image.png

其框架如下:

2 MapReduce_第4张图片
Paste_Image.png
  • map后的数据存放在内存中,经过分区和排序,再溢写到磁盘中(此任务在map所在当前节点本地完成)
  • partition分区就是把map的数据分成一个个部分,规则由程序员指定,默认由哈希模运算分区,分区的目的是把map的输出数据进行负载均衡
  • sort比较规则为按照ASCII码大小进行比较
  • merge on disk:合并到磁盘,默认规则为按照哈希值进行合并
  • 分区在把数据传入reduce的时候起作用。例如:分区在0区,就传给第1个reduce;在1区,就传给第2个reduce……
2 MapReduce_第5张图片
Paste_Image.png
2 MapReduce_第6张图片
Paste_Image.png

主要考点:partition/sort/combiner,combiner可以没有。
上面统计单词个数的框架中,map阶段就可以使用combiner,使第2个map中的(car,1)(car,1)变成(car,2)。
下图为reduce的工作流程:

2 MapReduce_第7张图片
Paste_Image.png

过程如上上图所说,reduce从task tracker拷贝数据,存入内存缓冲区中,満了就溢写到disk中,再合并成一个大文件(合并规则是按照键进行合并),然后作为reduce的输出。

4.split

split为把block切割成一个个片段。

2 MapReduce_第8张图片
Paste_Image.png

上图前3行为说明,最后一行为计算split大小的算法:先取max.split和block的最小值,再取min.split和刚才得到的最小值的最大值。

5.JobTracker和TaskTracker

2 MapReduce_第9张图片
Paste_Image.png
  • JobTracker在2.x版本后就没有了
  • TaskTracker负责执行每一个任务是指map任务或reduce任务
  • JobTracker可以运行在任何节点,而TaskTracker一般运行在DataNode上

你可能感兴趣的:(2 MapReduce)