Hadoop的MapReduce分布式计算框架基础教程,收藏学习

Hadoop是目前最火热的大数据开源系统,其中包含许多组件以及衍生工具,其中许多之前都介绍过,今天来讲一讲大数据的核心计算框架——MapReduce。

一、简介

所谓大数据,通常而言都需要用服务器集群来处理,普通机器处理的数据根本无法用‘大’来形容。那么如果要实现一个大数据系统,其核心功能在于两大部分,其一就是存储,其二就是计算。海量数据要存储在集群服务器上,就需要实现大型的分布式存储系统,在Hadoop中就是Hdfs文件管理系统。而对于海量数据的计算处理,就需要用到今天说的MapReduce计算框架了。

MapReduce,其实是两个部分,分别是Map和Reduce,其核心思想在于分工而治。简单来说就是先将数据分为无数个小块,然后再分别处理每个小块,最后将每个小块汇总。原理图如下:

Hadoop的MapReduce分布式计算框架基础教程,收藏学习

光看图大家可能不太明白,这里举个简单的例子帮助理解。假如有10000张钞票,其中面值有1块、5块、10块、20块、50块和100块不等,这时需要计算出这10000张钞票一共有多少钱,请问如何计算呢?最直接的做法就是一张一张数,然后相加,但是这样只能由一个人来操作,因此效率是非常低下的。

比较好的做法就是先划分6个区域,每个区域块分别存放不同面值的钞票,分完块之后再计算出每堆钞票的数量,最后汇总相加得出结果,这样的做法最大的好处就是可以多人分工处理。而MapReduce正是采取的这种方式。

首先10000张钞票先进入Map阶段,也就是先分片。假设一共分出5个进程来处理Map阶段的数据,那么就是每个进程处理2000张钞票,处理完毕后,每个进程都会都会得出6个区域块。这时将这5个进程的区域块合并,就会得出总的6个区域块。然后进入reduce阶段,reduce也会采取多进程模式,假设分出6个进程来处理reduce阶段的数据。

每个进程处理一个区域块,这时就会得到6个区域块的结果,也就是6个面值的钞票分别有多少,然后将其汇总,得出结果。

二、代码

了解原理之后,接下来就可以看看编码阶段,其实编码阶段非常简单,只需要实现框架提供的map和reduce函数即可:

Hadoop的MapReduce分布式计算框架基础教程,收藏学习

现在假设输入文件如下:

Hadoop的MapReduce分布式计算框架基础教程,收藏学习

以1块面值的举例,一共有6张面值为1块的钞票。如果有2个map进程同时运行,那么这两个map进程可能运行的结果如下:

Map进程1:(1,1)(1,1)(1,1)(1,1)

Map进程2:(1,1)(1,1)

这时这两个map进程会将结果传入处理面值1块的reduce进程中,最终的结果就会是:

(1,6),表示一共6张1块的。

运行完毕后会在指定目录生成如下两个文件:

Hadoop的MapReduce分布式计算框架基础教程,收藏学习

_SUCCESS文件表示MapReduce程序执行完毕

part-r-00000文件表示执行结果,后面数字为00000是因为只设置了一个分区,打开后结果如下:

Hadoop的MapReduce分布式计算框架基础教程,收藏学习

可见MapReduce将所有面值的钞票都分别统计完毕了。

希望这篇介绍能帮助各位了解MapReduce运行原理,如果大家有兴趣的话,还可以思考一下如何编写MapReduce程序能够得到最终下图的面值总和呢?

对此有疑问大家也可以私信留言一起交流,最后别忘了关注。


分享到:


相關文章: