1、HDFS原理:
一个节点登记,其他节点存数据,其他节点存完数据向登记节点回报。
2、存储模型(字节):
- 文件线性切割成块(Block:偏移量、位置信息)
- 偏移量 offset(byte)
offset:块的第一个字节面向原文件的下标
第一个字节下标是0
如果一个块是四个字节,那么第一个块是0、1、2、3,第二个块的偏移量是4
- Block分散存储在集群节点中
- 单一文件Block大小一致,文件与文件可以不一致
定义四个字节一个块,存储时就是四个字节,如果最后只剩下两个字节,那么就是一个块存两个字节
第一个文件可以是四个字节一个块,第二个直接可以是8个字节
- Block可以设置副本数(一个文件切了两个块,也就是两个节点A1和B1,如果A1挂掉,那么文件不再完整,则需要A*作为副本,提高可靠性),副本分散在不同节点中
副本数不要超过节点数量
块是平级的,如果有三个副本,则这个块需要三个节点存储。
- 文件上传可以设置Block大小和副本数
- 已上传的文件Block副本数可以调整,大小不变
- 只支持一次写入多次读取,同一时刻只有一个写入者
- 可以append追加数据
3、架构模型:
- 文件元数据MetaData,文件数据
元数据
数据本身
- (主)NameNode节点(进程维护了虚拟目录树来映射存储关系)保存文件元数据:单节点 posix
- (从)DataNode节点(保存小文件)保存文件Block数据:多节点
- DataNode与NameNode保持心跳,提交Block列表
- HdfsClient与NameNode交互元数据信息
- HdfsClient与DataNode交互文件Block数据
4、HDFS设计思想
HDFS 1.*版本的Block默认大小是64M,2.*Block版本的默认大小是128M。