vlambda博客
学习文章列表

凌达干货 | MapReduce介绍

云计算之MapReduce

MapReduce是谷歌公司的核心计算模型,Hadoop开源实现了MapReduce。MapReduce将复杂的、运行于大规模集群上的并行计算过程高度抽象到了两个函数:Map和Reduce,方便了分布式编程工作,编程人员在不会分布式并行编程的情况下,也可以很容易将自己的程序运行在分布式系统上,完成海量数据的计算。

MapReduce工作原理

MapReduce采用”分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。

在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。

MapReduce工作过程

1、输入文本信息,需要提前将文件上传至hadoop中,过getSplits方法获得Split数组,然后在用getRecordReader 方法对Split做处理,每读一行交给一个map处理。

2、每个节点上的所有map,进行Shuffling,按key将map放在其他节点上去还是继续在该节点下处理

3、排序

4、结果交由reduce处理

5、处理完成写到Hadoop上

MapReduce应用

  • 简单的数据统计

利用MapReduce简单统计信息,利用MapReduce文本进行处理,对每个用户的上行流量,下行流量 还有宗总流量进行分析,输出手机号、上行流量、下行流量 。


  • 搜索引擎建索引

word-doc矩阵:在进行文件分类或文档检索的时候,我们通常需要建立一个word-doc矩阵,来记录每个词在每篇文档中出现的次数。


图的宽度优先遍历:现代的爬虫一般采用宽度优先的规则来遍历网络。还有在Dijkstra算法中也是一种宽度优先的规则--每发再一个新的最近点,就更新与之相邻的节点的dist。我们可以用MapReduce迭代的方式来实现Dijkstra算法。每轮迭代运行一次Map-Reduce,最多迭代N次,N是图中节点的个数。用邻接链表来存储图。算法开始时,起始节点的dist赋0,其余的节点dist赋无穷大。


  • 海量数据查找

用MapReduce解决在海量数据中求Top K个数。在海量日志数据处理中,对数据清洗完成之后统计某日访问网站次数最多的前K个IP。这个问题的实现方式并不难,我们完全可以利用MapReduce的Shuffle过程实现排序,然后在Reduce端进行简单的个数判断输出即可。


  • 复杂数据分析算法实现

一些算法的MapReduce实现——1 TB数据排序。把要排序的数据划成M个数据块(可以用Hash的方法做到),然后每个map task对一个数据块进行局部排序,之后,一个reduce task对所有数据进行全排序。这种设计思路可以保证在map阶段并行度很高,但在reduce阶段完全没有并行。



-END-


文案:黄雨欣

排版:黄雨欣

校对:Robinly

制作:凌达之珑达工作室


凌达新闻 | 凌达大会


凌达新闻 | 凌达讲座


更多精彩

|||