1. HDFS架构
HDFS是主从架构,一个NameNode作为主节点,维护管理文件系统的元数据信息,N个DataNode作为从节点,存储实际的数据块。
【图片后续补】
1.1 NameNode(简称NN)
维护管理文件系统的元数据信息
- 文件目录结构
- 文件名称
- 文件属性(权限,创建时间,副本数…)
- 文件对应的块(副本)与DataNode的映射关系
这个映射关系,不会持久化存储,而是在集群启动和运行时,由DataNode定期发送BlockReport给NameNode,NameNode在内存中动态维护该映射关系
1.2 DataNode(简称DN)
DataNode可以分布在不同的机架(RACK)上,主要功能存储实际的数据块,提供数据块的读写功能。
另外DataNode还会定时的跟NameNode通信
- 每隔3S(参数是dfs.heartbeat.interval)向NameNode发送一次心跳信号
- 每隔21600000MS(既6H,参数是dfs.blockreport.intervalMsec)向NameNode发送一次块报告
2. SecondaryNameNode(简称SNN)
SecondaryNameNode是NameNode的一个辅助进程,会定期的合并NameNode的fsimage文件和edits日志为新的fsimage文件并推送给NameNode,简称为检查点(checkpoint)
chekpoint默认参数
- dfs.namenode.checkpoint.period=3600 单位是S
- dfs.namenode.checkpoint.txns=1000000
2.1 SecondaryNameNode工作流程
【图片后续补】
- NameNode启动时加载最新的fsimage_n和edits_n+1-n+a,并生成新的日志edits_inprogress_n+a+1
- SecondaryNameNode把fsimage_n和edits_n+1-n+a复制到SecondaryNameNode节点,把这两个文件合并为fsimage_n+a
- SecondaryNameNode把新的镜像文件fsimage_n+a推送至NameNode
- NameNode节点的edits_inprogress_n+a+1写满,名称变更为edits_n+a+1-n+b
- NameNode生成新的日志edits_inprogress_n+b+1
- SecondaryNameNode定期去NameNode复制最新的fsimage文件和edits日志,并合并为新的fsimage镜像文件
3. 副本放置策略
【图片后续补】
第一个副本
- 提交节点为DataNode,那么第一个副本直接写到该节点的HDFS目录
- 集群外提交,则随机选一个网络和CPU较为空闲的节点
第二个副本
- 放置于与第一个副本不同机架的节点上
第三个副本
- 放置于与第二个副本同一机架的不同节点上