(大数据)MapReduce

Posted 多元思维的开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(大数据)MapReduce相关的知识,希望对你有一定的参考价值。

MapReduce 是 Hadoop 大数据里的计算框架,也是一种编程模型。之所以称 MapReduce 是一种编程模型,是因为很多大数据计算框架都是基于 MapReduce 的思想实现的。


MapReduce 作为计算框架已经没有使用的价值了,完全可以使用像 Spark、Flink 这些计算框架来代替 MapReduce,那为什么还要讲它呢?这是因为 MapReduce 作为编程模型,其计算的思想是非常值得学习和运用的。


MapReduce 计算的过程主要分三个步骤:map、shuffle 和 reduce。



我以 “获取每个用户消费金额最大的订单” 这个需求为例来讲讲这三个步骤。


假设 HDFS 记录的订单数据是这样的:


(大数据)MapReduce


map 的计算过程:


首先从数据源读取相应数据,作为 map 的输入;然后 map 就会以 user_id 作为 key,用户的订单集合作为 value 这样的格式输出。如下图:


(大数据)MapReduce


shuffle 的计算过程:


因为 map 的输出结果有可能还是会存在相同的 key,此时就将这些相同 key 对应的值进行汇聚,并重新输出。如下图:


(大数据)MapReduce


reduce 的计算过程:


shuffle 后的结果不会出现重复的 key,因此可以遍历这些结果集并从对应的 value (用户的订单集合),挑选出金额最大的订单 id。如下图:



上述三个步骤就是 MapReduce 的核心步骤,因为计算框架会自动帮我们实现 shuffle,所以我们在实现计算任务时只需要专注 map 和 reduce 这两个步骤即可。


那当我们提交了一个 MapReduce 作业后,它是怎么在 Hadoop 集群执行的呢?其过程如下:


首先 JobClient 会向 JobTracker 服务器提交 MapReduce 作业,然后 JobTracker 会根据 MapReduce 的情况向 ResourceManager 申请资源,并将 MapReduce 程序的 Jar 包上传到某个 DataNode 中。


然后,ResourceManager 分配资源并从中挑选一个 NodeManager 作为 MapReduce 程序的主节点,也就是 MRAppMaster,负责整个 MapReduce 作业的执行;其他的 NodeManager 作为 Map 任务和 Reduce 任务的执行节点。


接着,MRAppMaster 就会向从 ResourceManager 分配的 NodeManager 节点下发执行任务的命令。执行 Map 任务和 Reduce 任务,监听它们的执行情况和接收它们的执行结果。


最后,JobTracker 会 监听 MRAppMaster 的执行情况,一旦 MRAppMaster 执行完,JobTracker 就会将执行的结果返回给 JobClient。


整个执行过程如下图:




以上是关于(大数据)MapReduce的主要内容,如果未能解决你的问题,请参考以下文章

大数据框架之Hadoop:MapReduceMapReduce框架原理——Join多种应用

大数据技术栈

大数据离线

MapReduceMapReduce中的分区方法Partitioner

大数据学习之七——MapReduce简单代码实例

hadoop离线day04--Hadoop MapReduce