HDFS(分布式文件系统)是hadoop的核心组件之一,其重要性不言而喻。
HDFS架构思想
    HDFS具有主/从( master/slave)架构。HDFS集群由一个NameNode和许多DataNode组成,NameNode是一个主服务器(master),管理文件系统名称空间并管理客端对数据的访问。此外集群中每个节点通常是一个DataNode,DataNode管理它们的节点上存储的数据。
    HDFS内部,文件被分Clink成一个或多个块(block),这些块存储在DataNode中。NameNode执行文件系统名称空间的相关操作,记录了文件分了多少块,每个块偏移量是多少,大小是多少在哪些datanode上(元数据)。数据节点负责服务来自文件系统客户端的读写请求。
    HDFS将每个文件存储成一系列的数据块(block),除了最后一个,所有的数据块都是同样大小的。为了容错,文件的所有数据块都会有副本。每个文件的数据块大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。副本通过负载均衡(balancing)合理地分布在DataNode上,同时每个block文件都有一个.meta后缀的元数据文件关联。该文件包含了一个版本和类型信息的头部,后接该block中每个部分的校验和。HDFS中的文件都是一次性写入的,并且严格要求在任何时候只能有一个写入者。
    NameNode全权管理数据块的复制,它周期性地从集群中的每个DataNode接收心跳信号(Heartbeaty )。接收到心跳信号意味着该DataNode节点工作正常。若一般在10分钟内没有接受到某一个DataNode的Heartbeaty,证明该DataNode出了问题,NameNode会将DataNode中的数据复制到其他的DataNode中。
    NameNode上保存着HDFS的DataNode空间。对于任何使文件系统元数据产生修改的操作,NameNode都会使用一种称为Edits Log的事务日志记录下来(先追加Edits Log日志,在进行数据操作,然后通过Heartbeaty反馈给NameNode对元数据进行更新)。整个文件系统的DataNode空间,包括数据块到文件的映射、文件的属性等,都存储在一个称为fsimage的文件中,这个文件也是放在NameNode所在的本地文件系统上。Edits log会随着对文件系统的操作而无限制地增长,这对正在运行的NameNode而言没有任何影响,如果NameNode重启,则需要很长的时间执行edits log的记录以更新fsimage(元数据镜像文件)。在此期间,整个系统不可用。这就显现出SecondaryNameNode的作用,它的作用就是为NameNode内存中的文件系统元数据生成检查点(条件:1、每小时一次,2、不足一小时,则只要edits log中记录的事务数达到了1000000,则合并)。
    SecondaryNameNode周期性地从namenode拷贝fsimage+edits log,在SecondaryNameNode中合并为新的fsimage,推送给namenode。
HDFS架构思想

相关文章: