Apache Hadoop 是一个软件框架(平台),它可以分布式地操纵大量数据。它于 2006 年出现,由 Google、Yahoo! 和 IBM 等公司支持。可以认为它是一种 PaaS 模型。
它的设计核心是 MapReduce 实现和 HDFS (Hadoop Distributed File System),它们源自 MapReduce(由一份 Google 文件引入)和 Google File System。
MapReduce
MapReduce 是 Google 引入的一个软件框架,它支持在计算机(即节点)集群上对大型数据集进行分布式计算。它由两个过程组成,映射(Map)和缩减(Reduce)。
在映射过程中,主节点接收输入,把输入分割为更小的子任务,然后把这些子任务分布到工作者节点。
工作者节点处理这些小任务,把结果返回给主节点。
然后,在缩减过程中,主节点把所有子任务的结果组合成输出,这就是原任务的结果。
图 2 说明 MapReduce 流程的概念。
MapReduce 的优点是它允许对映射和缩减操作进行分布式处理。因为每个映射操作都是独立的,所有映射都可以并行执行,这会减少总计算时间。
HDFS
对 HDFS 及其使用方法的完整介绍超出了本文的范围。更多信息请参见 参考资料。
从最终用户的角度来看,HDFS 就像传统的文件系统一样。可以使用目录路径对文件执行 CRUD 操作。但是,由于分布式存储的性质,有 “NameNode” 和 “DataNode” 的概念,它们承担各自的责任。
NameNode 是 DataNode 的主节点。它在 HDFS 中提供元数据服务。元数据说明 DataNode 的文件映射。它还接收操作命令并决定哪些 DataNode 应该执行操作和复制。
DataNode 作为 HDFS 的存储块。它们还响应从 NameNode 接收的块创建、删除和复制命令。
JobTracker 和 TaskTracker
在提交应用程序时,应该提供包含在 HDFS 中的输入和输出目录。JobTracker 作为启动 MapReduce 应用程序的单一控制点,它决定应该创建多少个 TaskTracker 和子任务,然后把每个子任务分配给 TaskTracker。每个 TaskTracker 向 JobTracker 报告状态和完成后的任务。
通常,一个主节点作为 NameNode 和 JobTracker,从节点作为 DataNode 和 TaskTracker。Hadoop 集群的概念视图和 MapReduce 的流程见图 2。
图 2. Hadoop 集群的概念视图和 MapReduce 的流程