本文共 1376 字,大约阅读时间需要 4 分钟。
本节书摘来异步社区《Hadoop MapReduce性能优化》一书中的第1章,第1.1节,作者: 【法】Khaled Tannir 译者: 范欢动 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。
Hadoop MapReduce性能优化
MapReduce编程模型的设计目标是,使用普通硬件的大型集群处理非结构化数据并产生大规模数据集。它能够在数千个计算节点的集群上处理TB级的数据,进行故障处理,完成任务复制并聚合最终结果。MapReduce模型简单易懂。它是由Google研究院的工程师在21世纪初设计的()。这一模型包含两个可以在多台机器上并行执行的函数:一个map函数和一个reduce函数。
要使用MapReduce,程序员需要编写一个用户定义的map函数和一个(同样是用户定义的)reduce函数来表示期望的计算逻辑。map函数读取键值对,执行用户指定的代码,产生中间结果。然后,通过reduce函数的用户指定代码聚合中间结果并输出最终结果。
MapReduce应用程序的输入按照每个输入规约加入到记录中,每个输入规约产生多个键值对,每个键值对以<k1, v1>形式表述。
因此,MapReduce处理过程包含以下两个主要环节。
.tifmap和reduce的函数签名如下:
<k2, v3>MapReduce编程模型的设计独立于存储系统。MapReduce通过reader从底层存储系统读取键值对。reader从存储系统读取所有记录,并封装成键值对供后续处理。用户可以通过实现相应的reader增加对新存储系统的支持。这种存储独立的设计使MapReduce能够分析保存在不同存储系统中的数据,为异构系统带来了极大便利。
为了理解MapReduce编程模型,我们假设你需要从给定的输入文件中获得每一个单词出现的次数。将其转化成为MapReduce作业,单词计数作业通过以下几个步骤定义。
这个MapReduce应用的完整步骤如图1-1所示。
进行键值对的聚合操作时,会产生的大量I/O以及网络流量I/O。为了压缩map和reduce步骤间需要的I/O网络流量,程序员可以选择在map一侧进行预聚合,而预聚合通过提供Combiner函数完成。Combiner函数与reduce函数类似,其不同之处在于,前者并不传递给定键的所有值,而是把传递进来的输入值之和作为输出值传递出去。
转载地址:http://ccqwa.baihongyu.com/