Hadoop 是Apache 下的一个项目,由HDFS、MapReduce、HBase、Hive 和ZooKeeper

等成员组成。其中,HDFS 和MapReduce 是两个最基础最重要的成员。

HDFS 是Google GFS 的开源版本,一个高度容错的分布式文件系统,它能够提供高吞

吐量的数据访问,适合存储海量(PB 级)的大文件(通常超过64M),其原理如下图所示:

采用 Master/Slave 结构。NameNode 维护集群内的元数据,对外提供创建、打开、删除

和重命名文件或目录的功能。DatanNode 存储数据,并提负责处理数据的读写请求。DataNode

定期向NameNode 上报心跳,NameNode 通过响应心跳来控制DataNode。

InfoWord 将MapReduce 评为2009 年十大新兴技术的冠军。MapReduce 是大规模数据

(TB 级)计算的利器,Map 和Reduce 是它的主要思想,来源于函数式编程语言,


     NameNode


   NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。

它负责管理文件系统名称空间和控制外部客户机的访问。

NameNode 决定是否将文件映射到 DataNode 上的复制块上。

对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,

最后一个复制块存储在不同机架的某个节点上。

注意,这里需要您了解集群架构。实际的 I/O 事务并没有经过 NameNode,只有表示 DataNode
和块的文件映射的元数据经过 NameNode。当外部客户机发送请求要求创建文件时,

NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应。

这个 NameNode 还会通知其他将要接收该块的副本的 DataNode。
   NameNode 在一个称为 FsImage 的文件中存储所有关于文件系统名称空间的信息。这个文件和一个
包含所有事务的记录文件(这里是 EditLog)将存储在 NameNode 的本地文件系统上。

FsImage 和 EditLog 文件也需要复制副本,以防文件损坏或 NameNode 系统丢失。

     DataNode

   DataNode 也是一个通常在 HDFS 实例中的单独机器上运行的软件。

Hadoop 集群包含一个 NameNode 和大量 DataNode。

DataNode 通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。
Hadoop 的一个假设是:机架内部节点之间的传输速度快于机架间节点的传输速度。
   DataNode 响应来自 HDFS 客户机的读写请求。它们还响应来自 NameNode 的创建、删除和复制块
的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。每条消息都包含一个块报
告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息
,NameNode 将采取修复措施,重新复制在该节点上丢失的块。
    文件操作可见,HDFS 并不是一个万能的文件系统。它的主要目的是支持以流的形式访问写入的大型
文件。如果客户机想将文件写到 HDFS 上,首先需要将该文件缓存到本地的临时存储。
如果缓存的数据大于所需的 HDFS 块大小,创建文件的请求将发送给 NameNode。
NameNode 将以 DataNode 标识和目标块响应客户机。同时也通知将要保存文件块副本的 DataNode。
当客户机开始将临时文件发送给第一个 DataNode 时,将立即通过管道方式将块内容转发给副本
DataNode。客户机也负责创建保存在相同 HDFS 名称空间中的校验和(checksum)文件。
在最后的文件块发送之后,NameNode 将文件创建提交到它的持久化元数据存储

(在 EditLog 和 FsImage 文件)。   

   Linux 集群

  Hadoop 框架可在单一的 Linux 平台上使用(开发和调试时),但是使用存放在机架上的商业服务
器才能发挥它的力量。这些机架组成一个 Hadoop 集群。它通过集群拓扑知识决定如何在整个集群中分
配作业和文件。Hadoop 假定节点可能失败,因此采用本机方法处理单个计算机甚至所有机架的失败。


Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐