定位
Hadoop 的分布式文件系统;对应Google的 大数据“三驾马车”的第一驾GFS(Google 文件系统)
将数以千计的服务器、数以万计的磁盘当作一个单一的存储系统进行管理,对应用程序提供数以 PB 计的存储容量,让应用程序像使用普通文件系统一样存储大规模的文件数据。
手段
在一个大规模分布式服务器集群上,对数据分片后进行并行读写及冗余存储
架构图
![](https://img.haomeiwen.com/i15956463/dadc77fb342a58bd.png)
DataNode
负责文件数据的存储和读写操作
将文件数据分割成若干数据块(Block),每个 DataNode 存储一部分数据块
应用程序客户端并行访问这些数据块
实践中:HDFS集群有几百到几千台,每台有8台以上磁盘
一般一个文件块会存三份;一份被保存在写入数据的那台机器上;另一份被保存在本机架内的另一台机器上;最后一份保存在另一个机架的任意一台机器上。
NameNode
负责整个分布式文件系统的元数据(MetaData)管理;包括文件路径名、数据块的 ID 以及存储位置等信息
负责除了 “实际数据块” 以外的所有数据的管理工作
高可用设计
数据存储故障容错:存储时计算校验和;读出时,重新计算数据的校验和,不正确就去读备份数据
磁盘故障容错:DataNode检测到后,将对应的所有BlockID报告给NameNode,NameNode检查在哪有备份;通知对应服务器将对应的Block复制到其他服务器;以保证数据块的备份数满足要求
DataNode故障容错:DataNode和NameNode通过心跳通信,如果一个DataNode宕机,NameNode就去找对应的Block有哪些,通知有备份的服务器,复制给其他服务器;以保证数据块的备份数满足要求
NameNode故障容错(单独整理)
NameNode是HDFS的核心,管理着整个分布式文件系统的元数据(MetaData);所以一旦故障,整个集群所有DataNode数据存着也没用;因为存储是分布式存储的,每个DataNode只是存着一部分数据,根本不完整,没有NameNode,谁也不知道完整的文件是啥样
主从热备架构图
![](https://img.haomeiwen.com/i15956463/0a87d735a8d7afdd.png)
主服务器提供服务;从服务器进行热备;通过ZooKeeper进行选举,争夺znode锁资源,决定谁是主服务器
DataNode会向两个NameNode都发送心跳数据,但是只有主 NameNode 才能向 DataNode 返回控制信息。
主从 NameNode 之间通过一个共享存储系统shared edits 来同步文件系统的元数据信息
主 NameNode 服务器宕机,从NameNode 通过 ZooKeeper 升级成为主服务器
工程上系统高可用的一般策略
冗余备份
失效转移
降级&限流
网友评论