概述
HDFS理论基础
-
思考:为什么需要开发HDFS?
- 思路:开发hdfs肯定是为了更好地去支持分布式存储和计算。
- 1.hdfs对于分布式中的分而治之,并行计算的支持
- 2.hdfs对于分布式中的计算向数据移动的支持。
- 思路:开发hdfs肯定是为了更好地去支持分布式存储和计算。
-
存储模型
- 文件线性按字节切割成块(block),有offset,id
- 不同文件的块大小可以不一样
- 同一个文件除了最后一个块,其他的块大小一致
- block的块大小依照硬件到I/O调整。hadoop2.x默认块大小为128MB
- block分散在集群的节点上,有自己的location信息。
- block有副本机制(replication),没有主从概念,副本存在不同的节点上。
- 副本是为了满足数据可靠性和计算性能
- 文件上传可以指定block大小和副本数,上传后只能修改副本数(增加副本数)
- 文件支持追加数据,不支持修改数据
-
架构设计
- hdfs是一个主从架构(Master/Slaves)
- 主要由NameNode和DataNode组成
- hadoop2.x支持两种集群模式:非高可用和高可用(HA)
- 非高可用:由一个SecondaryNameNode对NameNode进行数据备份更新FsImage和EditLog。
- 高可用(HA):2.x支持一个Active和一个StandyBy的NameNode组成
- 高可用系统架构图
- NameNode负责存储和管理文件元数据,并且维护了一个层次性类Linux的文件目录树
-
角色功能
- NameNode:
- 完全基于内存存储文件元数据、目录结构、文件block的映射
- 提供持久化方案保证数据可靠性
- 提供副本放置策略
- DataNode:
- 基于本地磁盘存储block文件
- 并保存block的校验和数据保证blcok的可靠性
- 与NameNode保持心跳,汇报block列表状态
- Client:
- 与NameNode交互文件元数据
- 与DataNode交互文件blcok数据
- 次要角色:
- zookeeper:负责NameNode的主备管理
- zkfc:监控NameNode的状态,并且在zookeeper上注册NameNode的临时节点
- JournalNode:负责主备节点的数据同步
- NameNode:
-
元数据持久化
- tips:元数据持久化一般有两种方式:
- 方式1:通过镜像、快照、序列化等备份的方式:定时备份。
- 优点:恢复备份快。
- 缺点:I/O慢,完整性较差
- 方式2:日志文件的方式:记录实时发生的增删改查操作
- 优点:完整性好
- 缺点:加载恢复数据时间慢,占用空间
- 方式1:通过镜像、快照、序列化等备份的方式:定时备份。
- NameNode采用FsImage和EditLog两种方式结合的方式去做元数据的持久化。
- 滚动将增量的EditLog更新到FsImage,以保证更近时点的FsImage和更小的EditLog体积
- tips:元数据持久化一般有两种方式:
-
安全模式
- NameNode启动后会进入一个称为安全模式的特殊状态。
- 处于安全模式下的NameNode是不会进行数据块的复制的。
- NameNode从所有的DataNode接收心跳信号和快状态报告。
- 每当NameNode检测确认某个数据块的副本数量达到最小值(dfs.namenode.replication.min),才能确认该数据块为安全的。
- 在一定百分比(dfs.namenode.safemode.threshold-pct)的数据块呗NameNode检测确认安全之后(加上额外的30秒的等待时间),NameNode将退出安全模式。
- 接下来,它会确认还有哪些数据块没有达到指定副本数量,并将这些数据块复制到其他DataNode上。
-
副本放置策略
- 第一个副本:放置在上传文件的DN上,若是集群外上传的,则随机挑选一台磁盘不太满,CPU不太忙的DN
- 第二个副本:放置在和第一个副本不同的机架节点上
- 第三个副本:放置在和第二个副本相同机架的节点上
- 更多:随机
-
读写流程
- 写流程
- client会先在NameNode上创建文件元数据
- NameNode会校验元数据的正确性
- NameNode会返回Block的副本放置策略,返回一个有序的DataNode列表
- Client和DataNode建立Pipeline连接
- Client将快切分成packet(64KB),并使用chunk(512B) + chunksum(4B)填充
- Client将packet放到发送队列中,并想第一个DataNode发送
- 第一个DataNode收到packet后本地存储根据DataNode列表向第二个DataNode发送
- 第二个DataNode收到packet后本地存储根据DataNode列表向第三个DataNode发送
- 这一个过程中,上游节点同时发送第二个pacjket
- 当block传输完成,DataNode们会向NameNode汇报,同时Client继续传输下一个block
- 读流程
- 为了降低整体的带宽消耗和读取延时,HDFS会尽量让Client去读取离它最近的副本块。
- Client和NameNode交互文件元数据回去fileBlockLocation
- NameNode会根据距离策略排序返回
- Client尝试下载block块并检验完整性
- HDFs支持Client输出文件的offset自定义连接哪些block的DataNode,自定义获取数据
- 这个特性支持计算层去并行计算各个block块的数据。
- 写流程
- 结论:上述红色字体部分是hdfs对于计算层去分布式并行计算的文件存储层的支持。
最后
以上就是俊秀盼望为你收集整理的大数据学习随笔2.(HDFS理论基础)HDFS理论基础的全部内容,希望文章能够帮你解决大数据学习随笔2.(HDFS理论基础)HDFS理论基础所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复