本节书摘来异步社区《Hadoop MapReduce性能优化》一书中的第1章,第1.2节,作者: 【法】Khaled Tannir 译者: 范欢动 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.2 Hadoop MapReduce概述
Hadoop MapReduce性能优化
Hadoop由Google公司推出,是最流行的MapReduce编程模型的Java开源实现。还有一些其他的MapReduce开源实现(如Sphere、Starfish、Riak等),这些开源实现实现了Google文档描述的特性或者其中的部分特性。
Hadoop由分布式数据存储引擎和MapReduce执行引擎组成。在处理使用大量节点、围绕大量数据集展开的高分布性问题方面,Hadoop得到了成功的应用。上述节点一起构成了Hadoop集群,而Hadoop集群由一个称为JobTracker的主节点和多个工作节点(从节点)构成,每个工作节点称为一个TaskTracker。在这个框架体系下,一个用户程序称为一项作业,并分为两个步骤,即map和reduce。
与在MapReduce编程模型中类似,使用Hadoop MapReduce实现的时候,用户仅须定义map和reduce函数。Hadoop MapReduce系统会自动并行执行这些函数并确保容错。
要学习更多关于Hadoop MapReduce实现的内容,读者可以浏览Hadoop官方网站:http://hadoop.apache.org。
Hadoop MapReduce框架基本上采用了一个分布式文件系统来读写数据。这个分布式文件系统称为Hadoop分布文件系统(HDFS),是Google文件系统(GFS)的对等开源实现。因此,Hadoop MapReduce作业的I/O性能严重依赖于HDFS。
HDFS包含一个叫做NameNode(名称节点)的主节点和一个叫做DataNode(数据节点)的从节点。在HDFS内部,数据拆分为固定大小的数据块(block或chunk)并分发到集群中的所有数据节点。每个数据块一般复制为两个复制件:一个放在同一机架上,另一个放在其他机架上。NameNode负责跟踪哪个DataNode保存了哪个数据块的哪个复制件。