1、HDFS的写数据流程
1.1、Hadoop-client
hadoop的FileSystem类中,遍历文件目录的三种方法(源码和区别),通过FileSystem对象操作HDFS的方法就不过多讲了,我的上一篇博客给了一个操作HDFS的入门教程,其他的请参考官网示例。
1.2、剖析文件写入
Block、Packet、Chunk的概念 1.Hadoop-client询问NameNode文件是否可以上传,若可以,则获取数据存在那些DataNode; 2.Block分解成Packet上传到其中一个DataNode,第一个收到数据的DataNode传给下一个DataNode; 3.传输完成一个Block后,请求NameNode上传第二个Block给DataNode,直至传输完成;
- 第一个数据副本在Client所处的节点,客户端在集群外,随机选取一个
- 第二个节点在另一个机架的随机一个节点
- 第三个副本在第二个副本所在机架的随机节点
2、HDFS的读数据流程
- Hadoop-client请求NameNode下载文件,获取文件元数据以得到DataNode地址
- Hadoop-client挑选最近的一台DataNode请求读取数据
- Hadoop-client接收DataNode以Packet为单位传输过来的数据,缓存到一定量的数据再写入目标文件
3、NameNode和SecondaryNameNode
- NameNode格式化时创建【编辑日志Edits】和【镜像文件FsImage】;
- NameNode中的元数据存放在内存中,使用镜像文件FsImage定期备份数据到磁盘;
- 使用编辑日志Edits(只能追加)记录NameNode中的元数据的增删改(查询不会更改元数据);
- NameNode内存全量数据 = Edits + FsImage;
- NameNode在内存中的元数据与编辑日志Edits同步更新;
- SecondaryNamenode合并Edits和FsImage(定时到了,或Edits满了),形成fsImage.chkpoint;
- SecondaryNamenode使用新的fsImage.chkpoint替换NameNode旧的FsImage
PS:NameNode启动和SecondaryNamenode合并Edits和FsImage时,会滚动Edits,创建一个空的edits.inprogress,以便新的操作都写入edits.inprogress。NameNode只会记载Fsimage和未合并的Edits,合并过的Edits在Fsimage中。
[atguigu@hadoop102 current]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/name/current
[atguigu@hadoop102 current]$ ll
总用量 12352
-rw-rw-r--. 1 atguigu atguigu 42 12月 12 18:00 edits_0000000000000000001-0000000000000000002
-rw-rw-r--. 1 atguigu atguigu 1048576 12月 12 18:00 edits_0000000000000000003-0000000000000000003
-rw-rw-r--. 1 atguigu atguigu 1048576 12月 12 18:08 edits_0000000000000000004-0000000000000000004
-rw-rw-r--. 1 atguigu atguigu 1048576 12月 12 20:34 edits_0000000000000000005-0000000000000000005
-rw-rw-r--. 1 atguigu atguigu 42 12月 12 21:22 edits_0000000000000000006-0000000000000000007
-rw-rw-r--. 1 atguigu atguigu 1048576 12月 12 21:22 edits_0000000000000000008-0000000000000000008
-rw-rw-r--. 1 atguigu atguigu 42 12月 12 21:26 edits_0000000000000000009-0000000000000000010
-rw-rw-r--. 1 atguigu atguigu 1048576 12月 12 21:26 edits_0000000000000000011-0000000000000000011
-rw-rw-r--. 1 atguigu atguigu 690 12月 12 21:49 edits_0000000000000000012-0000000000000000020
-rw-rw-r--. 1 atguigu atguigu 1048576 12月 12 21:49 edits_0000000000000000021-0000000000000000021
-rw-rw-r--. 1 atguigu atguigu 42 12月 12 22:00 edits_0000000000000000022-0000000000000000023
-rw-rw-r--. 1 atguigu atguigu 1048576 12月 12 22:10 edits_0000000000000000024-0000000000000000186
-rw-rw-r--. 1 atguigu atguigu 1048576 12月 13 22:49 edits_0000000000000000187-0000000000000000187
-rw-rw-r--. 1 atguigu atguigu 1048576 12月 13 22:54 edits_0000000000000000188-0000000000000000188
-rw-rw-r--. 1 atguigu atguigu 1048576 12月 14 20:36 edits_0000000000000000189-0000000000000000189
-rw-rw-r--. 1 atguigu atguigu 3741 12月 14 21:38 edits_0000000000000000190-0000000000000000231
-rw-rw-r--. 1 atguigu atguigu 42 12月 14 22:38 edits_0000000000000000232-0000000000000000233
-rw-rw-r--. 1 atguigu atguigu 1048576 12月 14 23:17 edits_0000000000000000234-0000000000000000248
-rw-rw-r--. 1 atguigu atguigu 42 12月 15 20:51 edits_0000000000000000249-0000000000000000250
-rw-rw-r--. 1 atguigu atguigu 235 12月 15 21:52 edits_0000000000000000251-0000000000000000255
-rw-rw-r--. 1 atguigu atguigu 42 12月 15 22:52 edits_0000000000000000256-0000000000000000257
-rw-rw-r--. 1 atguigu atguigu 1048576 12月 15 22:52 edits_inprogress_0000000000000000258
-rw-rw-r--. 1 atguigu atguigu 2752 12月 15 21:52 fsimage_0000000000000000255
-rw-rw-r--. 1 atguigu atguigu 62 12月 15 21:52 fsimage_0000000000000000255.md5
-rw-rw-r--. 1 atguigu atguigu 2752 12月 15 22:52 fsimage_0000000000000000257
-rw-rw-r--. 1 atguigu atguigu 62 12月 15 22:52 fsimage_0000000000000000257.md5
-rw-rw-r--. 1 atguigu atguigu 4 12月 15 22:52 seen_txid --存放最后一个edits_的数字
-rw-rw-r--. 1 atguigu atguigu 216 12月 15 20:50 VERSION
|