MapReduce技术

MapReduce是Google 的一项重要技术,它是一个编程模型,用以进行大数据量的计算。对于大数据量的计算,通常采用的处理手法就是并行计算。至少现阶段而言,对许多开发人员来 说,并行计算还是一个比较遥远的东西。MapReduce就是一种简化并行计算的编程模型,它让那些没有多少并行计算经验的开发人员也可以开发并行应用。 在我看来,这也就是MapReduce的价值所在,通过简化编程模型,降低了开发并行应用的入门门槛。相对于现在普通的开发而言,并行计算需要更多的专业 知识,有了MapReduce,并行计算就可以得到更广泛的应用。

MapReduce的名字源于这个模型中的两项核心操作:Map和 Reduce。也许熟悉Functional Programming的人见到这两个词会倍感亲切。简单的说来,Map是把一组数据一对一的映射为另外的一组数据,其映射的规则由一个函数来指定,比如 对[1, 2, 3, 4]进行乘2的映射就变成了[2, 4, 6, 8]。Reduce是对一组数据进行归约,这个归约的规则由一个函数指定,比如对[1, 2, 3, 4]进行求和的归约得到结果是10,而对它进行求积的归约结果是24。

Map操作是独立的对每个元素进行操作,在FP中,操作是没有副作用 的,换句话说,Map操作将产生一组全新的数据,而原来的数据保持不变。因此,它是高度并行的。Reduce操作虽然不如Map操作并行性那么好,但是它 总会得到一个相对简单的结果,大规模运算也相对独立,因此也是比较适合并行的。

无论是Map还是Reduce都是以另外的函数作为参数,在 FP中,这样的函数被称为高阶函数(high-order function)。正是因为它们可以同其它函数相结合,所以,我们只要把Map和Reduce这两个高阶函数进行并行化处理,而无需面面俱到的把所有的 函数全部考虑到。这样便形成了一个以Map和Reduce为基础的框架,具体应用相关代码写在用户代码中,之后与MapReduce结合获得并行处理的能 力。当然,这么做的前提是按照这个框架的要求,把计算归结为Map和Reduce操作。为什么是Map和Reduce?从前面的内容我们可以看出,在 Map过程中,我们将数据并行,也就是将数据分开,而Reduce则把分开的数据合到了一起,换句话说,Map是一个分的过程,Reduce则对应着合, 这一分一合便在不知不觉中完成了计算。所以,站在计算的两端来看,与我们通常熟悉的串行计算没有任何差别,所有的复杂性都在中间隐藏了。

所 有这些并行化能力的获得都与FP有着密不可分的关系。事实上,不仅仅是MapReduce从FP中获得了灵感,其它一些并行编程模型也走上了同样的道路。 FP中有很多的好东西,比如自动内存管理,比如动态类型。在遥远的年代里,因为机器性能的原因,它们无法得到广泛应用,当机器性能不再是瓶颈,这些东西便 逐渐复活了。

前面提到过,并行计算对于普通开发人员来说,有一个比较高的门槛。从前我们或许可以不理会并行计算,但是随着Intel开始将 多核带入人们的日常生活,并行计算将会变得更加平民化,毕竟谁也不希望自己机器里面的多核只有一个在干活。现在的许多操作系统会把多核视为多处理器,但那 也得有多任务才能在CPU处多分得一杯羹。对于服务器端应用来说,拥有多任务的能力是一个正常的现象。但对于很多桌面应用来说,一条道跑到黑的情况比较多 见。而且,多任务并非为并行计算专门准备的,所以,控制粒度是很大的。如果需要更细粒度的并行计算,至少从表达能力上来说,多任务就有些麻烦了。

并 行计算进入日常开发的难度就在于编程模型,太复杂的东西会被人唾弃的,CORBA在这方面已经是个反面教材了。MapReduce已经为我们演示了一种可 以接受的编程模型,接下来,变化还会有,Intel和AMD都在努力。不过,具体的进程得取决于多核CPU占领市场的进度。

 
### MapReduce技术原理 MapReduce是一种用于大规模数据集分布式处理的技术,最初由Google在2004年的论文《MapReduce:Simplified Data Processing on Large Clusters》中提出[^1]。该技术的核心思想基于“分而治之”,即通过将复杂的任务分解成多个简单的子任务来提高执行效率和系统的可扩展性[^2]。 #### 基本工作流程 MapReduce的工作过程可以分为两个主要阶段:Map阶段和Reduce阶段。 - **Map阶段**:输入数据被分割为若干个小片段(splits),每个片段会被分配给一个Map Task进行处理。Map Task负责对输入数据进行解析,并将其转换为键值对的形式输出。这一过程中,用户可以通过自定义函数指定如何将原始数据映射到中间结果上。 - **Shuffle与Sort阶段**:这是连接Map和Reduce的重要环节,在此期间系统会对来自不同Mapper产生的相同Key对应的Values集合进行整理排序操作后再传递给Reducer实例去进一步加工计算;值得注意的是这个部分是由框架自动完成无需程序员额外编码干预。 - **Reduce阶段**:经过前面几步之后得到按key分类汇总后的value列表作为reduce function 输入参数之一另外还有另一个参数就是那个特定key本身最后再依据业务需求编写相应逻辑从而得出最终想要的结果形式。 此外,Hadoop生态系统中的HDFS文件系统以固定的block大小存储实际物理磁盘上的资料档案,但对于MapReduce而言其真正意义上的作业单元却是上述提到过的split概念——一种仅包含诸如偏移量、长度以及所处节点地址之类元信息而非真实内容本身的轻量化描述对象而已【参见引用说明】[^3] 。因此可以说split数量直接影响到了后续map task启动次数进而影响整体性能表现情况的好坏程度高低不一等问题存在与否取决于具体应用场景设定条件差异所致等因素共同作用下的综合考量结果体现出来罢了! ```python from hadoop import Mapper, Reducer class WordCountMapper(Mapper): def map(self, key, value): words = value.split() for word in words: yield (word.lower(), 1) class WordCountReducer(Reducer): def reduce(self, key, values): total = sum(values) yield (key, total) ``` 以上代码展示了一个简单单词计数的例子,其中`WordCountMapper`类实现了将每行文本拆分成单独词语的功能,而`WordCountReducer`则完成了统计各词频次的任务。 ### 应用领域 由于具备强大的并行运算能力加上良好的容错机制设计特点使得MapReduce非常适合应用于以下几大方面: - **大规模日志分析**:无论是网站访问记录还是服务器运维监控所产生的巨量历史积累下来的信息都可以借助于此种手段来进行挖掘探索找出潜在价值所在之处加以利用提升服务质量水平等等; - **搜索引擎索引构建**:当面对整个互联网络世界里浩瀚无垠般的网页链接资源时,则可通过部署多台机器组成集群环境同步开展抓取下载保存等一系列动作直至形成可供检索使用的数据库结构为止; - **大数据分析**:涵盖范围极广几乎涉及到现代社会生活的方方面面包括但不限于金融风险评估预测模型训练医疗服务个性化推荐方案制定科学研究实验数据分析成果验证等方面均有所涉猎贡献良多不可忽视忽略不得也。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值