一、HDFS简介
HDFS的全称是Hadoop Distributed File System,分布式文件系统。
1.HDFS的文件系统结构:
2.HDFS实现目标:兼容廉价的硬件设备、实现流数据的读写、支持大数据集、支持简单的文件模型、强大的跨平台兼容性
3.HDFS的局限性:不适合低延时数据访问、无法高效储存大量小文件、不支持多用户写入及任意修改文件。
二、HDFS相关概念
1.块:HDFS中最核心的概念。
与普通文件系统的联系:为了分摊磁盘读写开销,也就是在大量数据间分摊磁盘寻址的开销
区别:HDFS的一个块要比普通文件系统的块大很多。
2.HDFS两大组件:名称节点和数据节点
3.名称节点的核心数据结构:FsImage和EditLog
4.名称节点启用后,处理两大数据结构的过程:
5.第二名称节点(SecondaryNameNode)作用:名称节点的冷备份、对EditLog处理(解决EditLog不断增大的问题)
三、HDFS体系结构
四、HDFS的存储原理
1.冗余数据保存
HDFS把底层架构在非常廉价的机器集群之上,容易发生故障,所以需要数据冗余保存,以块为单位,冗余因子一般为3(保存3份—)。对于伪分布式结构(名称节点和数据节点在同一机器上),冗余因子只能为1。
好处:加快数据传输速度;容易检查数据错误;保证数据可靠性
2.数据存储策略
数据存放:如果有3个块的副本,2个机架。第一副本存在写入此块数据的机器上,第二副本存在其他机架的一个机器上,第三副本存在与第一副本存放机器相同的机架上的其他机器。如果还有4 5 6块,则采用随机算法随机存储。
数据读取:HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID。当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表中包含了副本所在的数据节点,可以调用API来确定客户端和这些数据节点所属的机架ID,当发现某个数据块副本对应的机架ID和客户端对应的机架ID相同时,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取数据。
3.数据的错误及恢复
- 名称节点出错 HDFS1.0暂停服务一段时间,然后利用SecondaryNameNode中的冷备份进行恢复。HDFS2.0可以马上用热备来恢复。
- 数据节点出错 数据节点通过远程调用,会定期向名称节点发送心跳信息,证明自己还活着。一旦过了很长时间,名称节点没收到数据节点的心跳信息,就证明该数据节点出现了问题,名称节点就会从其他的冗余备份数据中复制一份出现故障的数据节点的数据,然后存储到其他机器中。
- 数据错误 HDFS用校验码机制探测数据错误。在生成数据块时,会生成一个校验码,客户端读取数据块时也会通过计算生成一个校验码,将两个校验码比较,如果不一样,证明数据出现错误,会重新进行备份恢复。
五、HDFS读数据过程