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目录,随时可以恢复,直到超过设置的删除时间才会正式被删除。