HDFS是什么?
是一个分布式的文件系统,属于hadoop的一个存储的组件,用于存储海量的数据
特点是:容错性高,适合大数据的处理,流式的数据访问。但并不擅长低延迟的数据访问。
大体流程图:
客户端
1、客户端需要对上传的文件进行切分处理,如果超过阙值就对文件进行切分
2、客户端和NameNode进行交互,询问文件上传或下载的地址
3、客户端和DataNode进行交互,完成文件的上传和下载(通过散列效验文件的完整性)
4、客户端上传和下载是传输细粒度的64看数据包
5、客户端上传只传输给第一个DataNode,第一个Danode会传给第二个Dano,然后形成高可用性
zookeeper
1、zookeepker会在nameNode里面分别创建两个故障控制进程,帮助nameNode选主
2、如果ANN因为网络波动宕机,zookeeper会将ANN降级为SNN。然后SNN进行选主变成ANN
ActiveNode
1. 客户端询问文件上传至哪,NameNode 根据机架感知策略反馈可用节点;
2. NameNode 需要保存每个文件的元数据信息至内存(快速)和磁盘(安全);
3. 利用 QJM 小型文件系统保证元数据的高可用;
4. 接收 DataNode 的心跳,通过心跳判断节点是否存活已经接收文件块与 DN 的映射信息;
5. 给 DataNode 发送指令,副本如果不满足最小集群设置,会让 DN 进行复制。
SendByNOde
1. 负责定时的将 edits 文件进行合并,合并为 fsimage 文件
Hadoop 2.x 以及以后 fsimage 文件的合并机制:
时间纬度:1 小时合并一次;纬度检查周期:默认 1 分钟检查一次。
操作纬度:edits 操作次数超过 100W 次;
2. NameNode 需要保存每个文件的元数据信息至内存;
3. 利用 QJM 小型文件系统保证元数据的高可用;
4. 接收 DataNode 的心跳,通过心跳判断节点是否存活已经接收文件块与 DN 的映射信息;
DataNode
1. 节点启动以后给两个 NameNode 发送心跳,给知存活,已经文件块与节点映射信息;
2. 与客户端进行交互,完成文件的上传与下载工作。
3. 接收 NameNode 的指令,在有需要时去对文件块进行复制。
心跳 3s,3s 无心跳表示节点超时,5分钟*2+3s*10 = 10分30秒 认为是故障
QJM
1. 小型文件系统,内部使用 Paxos 算法实现了自主选主,CP 模型;
2. Active NameNode 2 分钟生成一个 edits 文件并写入 QJM 实现元数据的高可用;
3. 每个 NameNode 上的 edits 元数据是不完整的(主备切换导致),但是 QJM 中一定是完整的;
4. QJM 只保存 edits 文件,不保存 fsimage 文件,fsimage 文件只保存在 NameNode 中。SNN 将合并后的 fsimage 发送给ANN,ANN 验证无误后,存放到自己的目录中;
5. ANN 使用 fsimage 加 edits_inprogress_ 文件还有大于 fsimage 的 edits 文件即可完全恢复元数据。