HDFS(Hadoop Distributed File System) 分布式文件系统,在系统集群中有一台NamenNode存储元数据(元数据是对数据的描述)负责管理DataNode节点,其他机器部署DataNode管理一部分本地数据。 形象点: 把分布式数据库比作图书馆,NameNode是书目检索系统,DataNode是一个个书架。
HDFS保证数据高可用的实现方式: 针对NameNode:如何有效的管理元数据不丢失,有又能有效保证服务的性能及持续服务能力。 1.通过向edit log磁盘文件写入追加日志的方式,记录对元数据的修改。追加的方式降低的降低的对性能的要求。 2.在NameNode出现重启后,只需要重新执行一遍edit log的记录即可; 3.考虑到edit log文件会持续变大,后续执行的过程会很久的问题。引入JournalNodes集群、fsimage文件、以及 Standby NameNode(备节点) 4.在Active NameNode接收元数据请求后, 同时写入edit log 和 JournalNodes集群> Standby NameNode从JournalNodes集群拉去edit log日志 执行一遍>在一定周期内将Standby NameNode的元数据写入到fsimage,这样fsimage里是一套和Active NameNode一样的元数据>现在edit log会收到指令删除掉历史的日志行,这样1个新的edit log又重第一行开始写入; 5.当服务重启后,Active NameNode可以直接加载fsiamge元数据库文件,在执行edit log内的操作记录。启动的效率一下子就提升了; 6.当出现Active NameNode故障时,也可以自动切换到 Standby NameNode节点提供服务,保证服务的高可用
针对DataNode:一份文件时如何被存入到DataNode节点内的呢。 以1T文件为例,HDFS存储文件时是根据文件块 block大小方式,对文件进行分块切割。1个 block 128M, 1T=1,048,576M,会被分为8,192个block块。这些块会根据NameNode的安排均衡分配到各个DataNode节点商。
DataNode 如何保证数据的可靠性: HDFS默认对每个block有3个备份,你可以理解为一个block数据被分配到了三个不同的DataNode节点。这大大提高的文件数据的可靠性。