Hadoop的HDFS

HDFS设计思想

将数据存储到若干台单独的计算机上。

HDFS特点

1.存储超大文件

2.廉价硬件之上

3.一次写入,多次读取

HDFS架构

1.唯一的NameNode,唯一的SecondaryNameNode,都运行在主节点(master)

2.大于等于“1”个DataNode,运行在从节点(slave)

3.所有的数据均存放在DataNode里面

4.可以有若干个客户端(Client)

HDFS块

默认为128 MB,小于一个块大小的文件不会占据整个块的空间。

HDFS的NameNode

是HDFS的“大脑”,运行在master(主节点)中,唯一,掌握整个文件系统的目录树,以及目录树中的所有文件和目录。目录树被存储在FSImage、Edit Log中。FSImage为HDFS元数据的完整快照(Snapshot)。每次NameNode启动的时候,会默认加载最新的FSImage。

HDFS的SecondaryNameNode

的守护进程,定期合并FSImage、Edit Log。在生产环境中,SecondaryNameNode运行在独立的一台服务器上。

NameNode和SecondaryNameNode交互

1.SecondaryNameNode引导NameNode滚动更新Edit Log,并将修改文件名为Edit Log.new

2.SecondaryNameNode将NameNode的FSImage、Edit Log复制到SecondaryNameNode的本地检查点中目录。

3.SecondaryNameNode将本地检查点中的复制而来的FSImage、Edit Log.new合并,形成新的FSImage文件,压缩,写入磁盘。

4.SecondaryNameNode将新的FSImage发送到NameNode,NameNode直接加载和应用该文件。

5.NameNode将Edit Log.new更名为Edit Log。

HDFS的DataNode

在HDFS中扮演着从节点(slave)的角色,它在Name Node的指导下完成I/O流任务。所有文件块(block)都存于DataNode中,DataNode存放块的目录为:$(dfs.data.dir)/current下,块的文件名为blk_blkID。

HDFS的容错

心跳机制

、Data Node维持心跳检测,确保NameNode与健康的DataNode之间的通信。

文件检测

会在文件存储的时候记录每个文件校验和,用来之后对文件进行I/O操作提供文件是否完整的检验标准。如果在一个DataNode中,一个文件在读取时的大小与NameNode所记录的该文件的校验和不一致,则判断该文件已经损坏,不再在该DataNode中取文件,从其他DataNode的上面存放的这份文件的副本(replication)。

集群(Cluster)负载均衡

的NameNode会根据目前现有的DataNode的负载情况,合理分配各个DataNode的负载。

冷备份NameNode上的FSImage、Edit Log

的目录树依赖NameNode上的FSImage、Edit Log,若NameNode上的FSImage、Edit Log丢失或失效,NameNode的目录树功能也将失效,最终导致HDFS分布式文件系统失效。因此,SecondaryNameNode会定期备份FSImage、Edit Log,确保NameNode的目录树可用和处于最新状态。

回收站机制

客户端想HDFS发出删除一个文件的命令,HDFS的NameNode并不是马上将该文件从FSImage删除,而是将文件移动到/trash目录,随时可以恢复,直到超过设置的删除时间才会正式被删除。