1. HDFS读写数据流程
本文我们学习HDFS读写数据流程,本章是面试重点
1.1 写数据流程
我觉得图已经比较清楚了,花了我1小时记忆与作图,啧啧啧
1.2 写数据流程
1.3 节点距离计算
HDFS写数据过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据
节点距离:两个节点到达最近的公共祖先的距离总和
1.4 机架感知
+ 第一个副本在client所处的节点上,如果client在集群外,随机选一个 + 第二个副本在另一个机架上随机选择一个节点 + 第三个副本在第二个副本所在机架上随机选择一个节点
2.HDFS NN和2NN工作机制
2.1 第一阶段:NameNode启动
1.第一次启动NameNode格式化后,创建Fsimage和Edits文件,如果不是第一次启动,直接加载Fsimage和Edits到内存
2.客户端对元数据进行增删改请求
3.NameNode记录操作日志,更新滚动日志
4.NameNode在内存中对元数据进行增删改
2.2 第二阶段:Secondary NameNode工作
1.Secondary NameNode询问NameNode是否需要CheckPoint
2.Seconary NodeNode请求执行CheckPoint
3.NameNode滚动正在写的Edits日志
4.将滚动前的Edits和Fsimage拷贝到Secondary NameNode
5.Secondary NaneNode加载Edits和Fsimage到内存,并合并
6.生成新的镜像文件fsimage.chkpoint
7.拷贝fsimage.chkpoint到NameNode
8.NameNode将fsimage.chkpoint重新命名为fsimage,替换旧fsimage
2.3 检查点时间设置
在hadoop.env中按之前介绍同理配置
// 默认1小时检查一次
HDFS_CONF_dfs_namenode_checkpoint_period=3600s
// 默认1分钟检查一次操作次数,操作次数达到1百万时,Secondary NameNode执行一次
HDFS_CONF_dfs_namenode_checkpoint_txns=1000000
HDFS_CONF_dfs_namenode_check_period=60s
3. DataNode工作机制
我们了解HDFS中DataNode存储节点的工作机制
3.1 DataNode工作机制
- DataNode启动后向NameNode注册
- NameNode注册成功
- 以后DataNode每周期6小时上报所有块信息
- 心跳每3秒一次,心跳返回结果带有NameNode给该DataNode的命令
- 如果超过10分钟+30秒没有收到DataNode心跳,则认为该节点不可用
3.2 相关配置
// DN向NN汇报块信息的时间间隔,默认6小时
HDFS_CONF_dfs_blockreport_intervalMsec=21600000
// DN扫描自己节点块信息列表的时间,默认6小时
HDFS_CONF_dfs_datanode_directoryscan_interval=21600s
// TIMEOUT=2*dfs.namenode.heartbeat.recheck-interval+10*dfs.heartbeat.interval=2*5分钟+10*3秒
// 300000毫秒==5分钟
HDFS_CONF_dfs_namenode_heartbeat_recheck___interval=300000
HDFS_CONF_dfs_namenode_heartbeat_interval=3
3.3 数据完整性保证
- 当DataNode读取Block的时候,它会计算CheckSum
- 如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏
- Client读取其他DataNode上的Block
- 常见的校验算法有CRC(循环冗余校验),MD5, SHA系列,HDFS采用CRC
- DataNode在其创建后周期验证CheckSum