1、NameNode(NN)
- 基于内存存储:不会和磁盘发生交换
只存在内存中
持久化
- NameNode主要功能
接受客户端的读写服务
收集DataName汇报的Block列表信息
- NameNode保存metadata信息包括
文件ownership和permissions
文件大小、时间
(Block列表:Block偏移量),位置信息(这个Block存在哪个DataNode)
Block每副本位置(由DataNode上报)
- 持久化方案:
快照
开机把内存写到磁盘,宕机后再次开机写回内存,会产生大量IO
日志
将用户的操作写入日志,恢复后,再次执行用户操作
- 位置信息:
快照和日志都不会保存位置信息,位置信息是在开机一段时间后,由DataNode通过心跳方式来汇报。因为可能DataNode未启动,无法提供数据,然后NameNode又保存了原来的位置信息,这样就会造成数据不一致,保证正确性。
- 恢复时间:
NameNode宕机,启动时恢复时间大概是半个小时左右,根据集群大小、汇报心跳速度时间延长。
- NameNode持久化
NameNode的metadata信息在启动后加载到内存
metadata存储到磁盘文件为fsimage
Block的位置信息不会保存到fsimage
edits记录对metadata的操作日志
2、DataNode(DN)
- 本地磁盘目录存储数据(Block),文件形式
- 同时存储Block的元数据信息文件(MD5值)
- 启动DN时会向NN汇报block信息
- 通过向NN发送心跳保持与其联系(3秒一次,如果NN10分钟没有收到DN的心跳,这认为其已经lost,并copy其上的block到其他DN)
3、数据完整性:
当一个block到DN,会将block算出一个md5值,存在元数据信息文件中,当client取回block后,会算一次md5值,此时比较两个值,来确定block是否被破坏。
4、HDFS优点:
- 高容错性
数据自动保存多个副本
副本丢失后,自动恢复
- 适合批处理
移动计算而非数据
数据位置暴露给计算框架(Block偏移量)
- 适合大数据处理
GB、TB、甚至PB级数据
百万规模以上的文件数量
10K+ 节点
- 可构建在廉价机制上
通过多副本提高可靠性
提供了容错和恢复机制
5、HDFS缺点:
- 低延迟数据访问
比如毫秒级
低延迟与高吞吐率
- 小文件存取
占用NameNode大量存储
寻道时间超过读取时间
- 并发写入、文件随机修改
一个文件只能有一个写者
仅支持append