元数据
如果节点已存在,就给该节点添加监听器
李四
Blk1
Blk3
客户端
张三
Active NameNode
Standby NameNode
HadoopHDFS NameNode Federation 联邦机制
ZKFC
客户端往第一个 DataNode 上传第一个 Block第一个 DataNode 并非指物理上的第一个,而是根据机架感知得出的最符合客户端的第一个 DataNode
DataNode1
DataNode5
每 3s 向 NameNode 上传心跳信息,心跳返回结果带有 NameNode 给 DataNode 的命令
磁盘元数据文件如下: edits_0000000000000000001-0000000000000000002 edits_0000000000000000003-0000000000000000004 edits_0000000000000000005-0000000000000000016 ... edits_inprogress_0000000000000001013 fsimage_0000000000000001006 fsimage_0000000000000001006.md5 fsimage_0000000000000001017 fsimage_0000000000000001017.md5
创建临时节点
客户端/NameNode/DataNode:1. 客户端上传文件时,会对文件大小进行检查,如果超过默认值128M,将对文件进行切分2. 客户端和 NameNode 进行连接,询问上传/下载文件对应的 DataNode3. 客户端和 DataNode 进行连接,完成文件上传/下载 a. 客户端询问文件上传至哪些 DataNode 时,Active NameNode 会通过机架感知策略以及 DataNode 的资源情况(通过 DataNode 的心跳获得)反馈给客户端具体可用节点 b. 客户端下载文件时,Active NameNode 会通过网络拓扑图且排序好反馈给客户端具体可用节点 c. 上传:客户端只需要和第一个连接的 DataNode 完成文件上传,第一个 DataNode 会和第二个 DataNode 连接,以此类推 d. 下载:客户端可以连接多个 DataNode 同时下载,因为客户端会根据字节数组索引位置进行拼接4. DataNode 每 3s 向 NameNode 上传心跳信息,心跳返回结果带有 NameNode 给 DataNode 的命令5. DataNode 周期(默认 6h)性向 NameNode 上传所有数据块信息6. DataNode 可能会宕机,其他存活节点会通过 NameNode 的命令进行文件拷贝,拷贝至集群的最小副本数(默认为 3 份)元数据:1. 元数据主要包含目录结构及文件分块信息等2. 客户端上传文件时,Active NameNode 会将该文件的元数据存储至内存,为了方便快速响应客户端3. 客户端上传文件时,Active NameNode 会将该文件的元数据同时存储至硬盘,为了防止内存元数据的丢失4. 客户端上传文件时,Active NameNode 会将该文件的元数据同步存储至 QJM,为了防止磁盘损坏造成的元数据丢失元数据中什么数据存储在内存?什么数据存储在磁盘?内存:目录结构、文件分块信息、文件块所处位置(DataNode 节点信息)硬盘:目录结构、文件分块信息元数据在硬盘是如何存储的?1. Active NameNode span style=\
DataNode4
Blk2
张三 文件位置:/zhangsan/a.jpg Block 数量:1 Block 位置: Blk1:DN5 DN3 DN4李四 文件位置:/lisi/video/b.mp4 Block 数量:2 Block 位置: Blk1:DN2 DN1 DN5 Blk2:DN2 DN5 DN6王五 文件位置:/wangwu/code/c.zip Block 数量:3 Block 位置: Blk1:DN1 DN2 DN5 Blk2:DN1 DN5 DN6 Blk3:DN1 DN3 DN4
b.mp4(200MB)
DataNode3
DataNode2
张三 文件位置:/zhangsan/a.jpg Block 数量:1 李四 文件位置:/lisi/video/b.mp4 Block 数量:2
第一个 DataNode 传给下一个 DataNode
假设王五上传文件时,集群内部发生了主备切换,工作流程又该如何呢?
DataNode6
NameService:/douyinBlock Pool ID:BP-1681503340-192.168.100.101-1679127654596
Quorum Journal Manager(QJM)只保存 edits 文件,不保存 fsimage 文件
上传
头条
NameService:/toutiaoBlock Pool ID:BP-1681503340-192.168.100.101-xxxxxxxxxxxxx
合并 fsimage
每 3s 向 NameNode 上传心跳信息(其中 Block 块和 DataNode 的节点映射关系根据 Block Pool ID 定点反馈),心跳返回结果带有 NameNode 给 DataNode 的命令
磁盘元数据文件如下: edits_0000000000000000001-0000000000000000002 edits_0000000000000000003-0000000000000000004 edits_0000000000000000005-0000000000000000016 ... edits_0000000000000001014-0000000000000001015 edits_0000000000000001016-0000000000000001017 edits_inprogress_0000000000000001018 fsimage_0000000000000000947 fsimage_0000000000000000947.md5 fsimage_0000000000000001006 fsimage_0000000000000001006.md5
第二个 DataNode 再继续传给下一个 DataNode
HadoopHDFS 上传文件工作流程
抖音
张三 文件位置:/zhangsan/a.jpg Block 数量:1 Block 位置: Blk1:DN5 DN3 DN4李四 文件位置:/lisi/video/b.mp4 Block 数量:2 Block 位置: Blk1:DN2 DN1 DN5 Blk2:DN2 DN5 DN6王五 文件位置:/wangwu/code/c.zip Block 数量:3 Block 位置: Blk1:DN1 DN2 DN5 Blk2:DN1 DN5 DN6 Blk3:DN1 DN3 DN4
王五
磁盘元数据文件如下: fsimage_0000000000000000947 fsimage_0000000000000000947.md5 fsimage_0000000000000001006 fsimage_0000000000000001006.md5
磁盘元数据文件如下: edits_0000000000000001014-0000000000000001015 edits_0000000000000001016-0000000000000001017 edits_inprogress_0000000000000001018 fsimage_0000000000000001006 fsimage_0000000000000001006.md5 fsimage_0000000000000001017 fsimage_0000000000000001017.md5
c.zip(300MB)
HadoopHDFS 架构总结
a.jpg(10KB)
如果 Active 的临时节点消失,ZK 会进行通知
张三 文件位置:/zhangsan/a.jpg Block 数量:1 李四 文件位置:/lisi/video/b.mp4 Block 数量:2王五 文件位置:/wangwu/code/c.zip Block 数量:3
王五 文件位置:/wangwu/code/c.zip Block 数量:3