白话MapReduce
Posted 数据小虾米
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了白话MapReduce相关的知识,希望对你有一定的参考价值。
“十则围之,五则攻之,倍则分之,敌则能战之,不若则能避之”
在大数据相关行业经常会听起MapReduce的名号,简称MR。简言之,MapReduce是一种处理海量数据的计算模式。
大多数人对于MR既熟悉又陌生,熟悉是因为经常听起,但又较少接触海量数据运算场景,所以又感到陌生。
然而,如果了解了MR背后的原理,或许便可掀开这层“神秘的面纱”。
本质上,MR是一种“分而治之”的算法思想,而这种计算思想是一种很“传统”求解问题的思路。
比如说,当你遇到一个较复杂的问题,即数一下图书馆内不同书架里所有书的数量,怎么处理?
直观的想法是把每个书架里的书都数一遍记个数,然后再把每个书架的数做个求和。
很简单对吧?恭喜你,你已经了解了MR思想的本质了。
所谓分而治之,即把复杂的问题分解为子问题,然后逐一求解子问题,再把子问题的结果汇总起来得到复杂问题的解。
在上述例子中,我们自然的将数整个图书馆的数分解为数每个书架的书,每个书架的书当然需要一本本数,然后再把每个书架的书数汇总起来,便得到了问题的答案。
过程中,数每个书架上书的操作称为map操作,而将不同书架书汇总的操作称为reduce操作。
可以看到,map操作的输入是一组分割好实体的集合,而输出是每个实体结算的结果,是一个“多对多”的过程;reduce操作的输入是map操作的输出,而输出则是问题的答案,即一个“多对一”的过程。
直观的,我们可以找多个人对图书馆的不同书架进行数书的map操作,可显著的减少问题的求解效率。如果将人对应为不同的计算机,便是Hadoop等大数据引擎的MapReduce求解计算方式。
聪明的朋友可以发现,实际上生活中很多问题并不能够转变为“分而治之”形式求解,或者转换过程较为复杂。这种情况下,Spark大数据引擎通过更抽象的转换和执行算子扩展,大大简化了代码开发的工作量,我们后续再进行拆解介绍。
总而言之,MapReduce是一种针对大规模数据进行特定场景问题快速处理的一种方法,很多高层语言如Hive SQL,会自动将基本数据操作转变为MapReduce任务执行。
值得注意的是,并非所有场景都需要海量数据高效计算,但MR背后“分而治之”的思想在生活中适当的场景中却可以更广泛的应用。
以上是关于白话MapReduce的主要内容,如果未能解决你的问题,请参考以下文章
大数据框架之Hadoop:MapReduceMapReduce框架原理——数据清洗(ETL)
大数据框架之Hadoop:MapReduceMapReduce框架原理——Join多种应用