-
什么是Mapreduce ? 分布式计算框架,是hadoop的一部分。
-
核心的思想: 分而治之
-
什么是分而治之
-
将一个复杂的大的问题,拆分成多个简单的小问题,将每个小的问题进行分别的计算处理操作,得到一个局部的结果之后,再进行合并操作最终得到一个结果。
-
-
比如说:需求 从1 + 2 + 3 + 4 .... + 10000 如何计算呢?
-
单机程序: 每个数字的累加计算。
-
分布式,分而治之思想:
-
先找十个人,10个计算器,来进行计算操作
-
第一个人拿走:1 + 2 + ... + 1000
-
第二个人拿走:1001 + 1002 + ... + 2000
-
依此类推 ....
-
第十个人拿走: 9000 + 9001 +... + 10000
-
最终,将这十个计算器计算的结果进行累加操作,得到最终的结果。
-
-
-
不能有依赖需求,比如说:生活当中要求5000个同学,想计算全区5000的同学的平均分
-
单机程序:把每个同学的成绩加起来,然后除以 5000
-
分而治之思想:
-
第一个人拿走:前300个同学的成绩 进行求平均分 ,等到平均分(70+80+90...+92.5)/300 = 80.5
-
第二个人拿走:300-2000个同学成绩,等到(70+85+90...+95)/1701= 69
-
第三个人拿走:2000-5000个同学成绩,等到(73+81+94...+92)/3000= 74.5
-
最终合并局部结果: (80.5+69+74.5)/3 是真正的平均值吗 ? 肯定不是...
-
-
分而治之,任务之间不能有依赖。
-
-
这个 MapReduce 分为两个部分:
-
Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。
-
Reduce负责“合”,即对map阶段的结果进行全局汇总。
-
-
MapReduce 的设计构思:
-
如何对付大数据处理:分而治之一个Mapreduce 的 程序,其实就是一个计算的任务,MapReduce是计算框架,必然会有数据的输入和数据的输出
-
构建抽象模型:Map和Reduce
-
统一构架,隐藏系统层细节,只需要关心,需要计算什么内容,如何进行业务逻辑的拆分,如何计算,逻辑是什么,至于底层如何拆解成多个map 和 多个 reduce,如何进行资源的申请,如何进行任务的分配等,都是隐藏的。
-
-
MapReduce核心功能:
-
将用户编写的业务逻辑代码和MapReduce本身自带的组件整合到一个完整的分布式计算程序。
-
将用户编写的业务逻辑代码和MapReduce本身自带的组件整合到一个完整的分布式计算程序。