一.简介
HDFS【Hadoop Distributed File System】是Hadoop组件中的分布式存储系统,提供高可靠性、高扩展性和高吞吐率的数据存储服务。
二.存储模型
1.文件线性切割成块【Block】,块分散存储在集群的各个节点中。
2.单一文件Block大小一致,不同的文件可以设置的不一样。
3.Block可以设置副本数,副本分散在不同的节点【副本数不要超过节点数,这样副本设置才有意义】。
4.文件上传可以设置Block大小和副本数,已上传的文件Block副本数可以调整,大小不变。
5.只支持一次写入多次读取,同一时刻只有一个写入,可以追加数据。
三.架构模型
1.NameNode【主】节点保存文件元数据,DataNode节点保存文件Block数据。
2.DataNode和NameNode之间通过心跳确认各个节点的健康情况,以及是否需要重启节点。
3.HDFSClient与NameNode交互元数据信息,与DataNode交互文件Block数据【需先访问NameNode】。
四.NameNode【NN】
特点:
1.基于内存存储,不会和磁盘发生交换。
2.接受客户端的读写请求,收集DataNode汇报的Block列表信息。
3.保存metadata信息,包括:文件ownership和permissions、文件大小、时间、Block列表、Block偏移量、位置信息和Block副本位置【由DataNode上报】等。
持久化:
1.NameNode的metadata信息在启动后会加载到内存。
2.metadata存储到磁盘文件名称为"fsimage"。
3.Block的位置信息不会保存到fsimage。
4.edits记录对metadata的操作日志。
五.DataNode【DN】
特点:
1.本地磁盘目录存储数据【Block】,文件形式
2.同时存储Block的元数据信息文件
3.启动DN时会向NN汇报block信息
4.通过向NN发送心跳保持与其联系【3s一次】,如果NN10Minutes没有收到DN的心跳,则认为其已经lost,并copy其上的block到其它DN节点
六.SecondaryNameNode【SNN】
它不是NN的备份【但可以做备份】,它主要的工作是帮助NN合并edits log,减少NN启动时间。
SNN执行合并时机
》根据配置文件设置的时间间隔fs.checkpoint.period默认3600s
》根据配置文件设置edits log大小fs.checkpoint.size规定edits文件的最大值默认是64M
SNN合并流程图解:
七.优点
1.高容错性
》数据自动保存副本
》副本丢失后自动恢复
2.适合批处理
》数据不动代码动
》数据位置暴露给计算框架【Block偏移量】
3.适合大数据处理
》GB、TB、甚至PB级别数据
》百万规模以上的文件数量
》10k+节点
4.可构建在廉价机器上
》通过多副本提高可靠性
》提供了容错和恢复机制
八.缺点
1.小文件存取
》占用NameNode大量内存
》寻道时间超过读取时间
2.并发写入、文件随机修改
》一个文件只能有一个写者
》仅支持append
3.低延迟数据访问
》数据延迟较大,比如毫秒级
》低延迟与高吞吐率成反比