HDFS读写数据流程
HDFS写数据流程
1、客户端跟NameNode通信请求上传文件,NameNode检查目标文件是否已经存在,父目录是否已经存在
2、NameNode返回是否可以上传
3、客户端先对文件进行切分,对NameNode请求第一个block上传
4、NameNode返回DataNode服务器DataNode 1,DataNode 2,DataNode 3
5、客户端请求3台中的一台DataNode 1(网络拓扑上的就近原则,如果都一样,则随机挑选一台DataNode)上传数据(本质上是一个RPC调用,建立pipeline),DataNode 1收到请求会继续调用DataNode 2,然后DataNode 2调用DataNode 3,将整个pipeline建立完成,然后逐级返回客户端
6、客户端开始往DataNode 1上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位。写入的时候DataNode会进行数据校验,它并不是通过一个packet进行一次校验而是以chunk为单位进行校验(512byte)。DataNode 1收到一个packet就会传给DataNode 2,DataNode 2传给DataNode 3,DataNode 1每传一个packet会放入一个应答队列等待应答
7、当一个block传输完成之后,Client再次请求NameNode上传第二个block的服务器.
HDFS读数据流程
1、客户端跟NameNode建立通信请求下载文件
2、NameNode按照就近原则返回该文件的元数据信息
3、跟DataNode请求下载文件
4、DataNode开始发送数据,packet(一个packet为64kb)为单位)
5、客户端把下载下来的所有块合并为最终的文件
HDFS优缺点
1)优点
(1)高容错性
a)数据自动保存多个副本。它通过增加副本的形式,提高容错性;
b)某一个副本丢失以后,它可以自动恢复。
(2)适合大数据处理
a)数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据。
b)文件规模:能够处理百万规模以上的文件数量,数量相当之大。
(3)可构建在廉价机器上,通过多副本机制,提高可靠性。
2)缺点
(1)不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
(2)无法高效的对大量小文件进行存储。
a)存储大量小文件的话,它会占用NameNode大量的内存来存储文件、目录和块信息。每条
元数据大小都为150字节.但是内存是有限的
b)小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。
寻址时间,目前技术水平在10ms左右
寻址时间/传输时间=1%,传输时间1000ms=1s,磁盘传输速度100M/S,计算机是2
的n次方,所以hadoop2.x默认块的大小为128M。 2^7
(3)不支持并发写入、文件随机修改。
a)一个文件只能有一个写,不允许多个线程同时写;
b)仅支持数据append(追加),不支持文件的随机修改。
HDFS组成架构
Client、NameNode、DataNode和SecondaryNameNode
1.Client 客户端
负责将文件切分为一个一个的块
与MameNode交互,获取文件位置信息
与DataNode交互,读取或写入文件
客户端提供一些命令来管理HDFS和访问HDFS
2.NameNode 就是一个管理者
管理HDFS的命名空间
管理块(block)的映射信息
配置副本策略
处理客户端请求
3.DataNode就是Slave,执行NameNode的命令
负责存储数据
执行数据块的读写操作
4.SecondaryNameNode 并非NameNode的热备,当NameNode出现问题时,并不能马上替换掉
NameNode并提供服务
辅助NameNode,分担工作量
定期合并fsimage和edits,并推送给NameNode
在紧急情况下可辅助恢复NameNode
SecondaryNameNode工作机制
Fsimage: NameNode内存中元数据序列化后形成的文件。
Edits:记录客户端更新元数据信息的每一步操作(可通过Edits运算出元数据)
1.NameNode启动时,先生成一个空的Edits.inprogress,然后加载Edits和Fsimage到内存中
此时NameNode内存就有最新的元数据
2.Cilent对NameNode发送增加删除请求,这些才做首先会被记录到Edits.inprogress中,但
如果此时NameNode出现问题不能工作,重启后就会从Edits中读取元数据信息
3.但是由于记录操作会越来越多,Edits文件也越来越大,导致NameNode启动时加载会很
慢,SecondaryNameNode就是用来解决这个问题,它来帮助NameNode进行Edits和Fsimage
文件的合并 (checkpoint)
实际上就是定时或者当Edits文件到达一定大小时,把Edits里存储的操作步骤执行一遍并
存储到fsimage中
4.当执行Checkpoint操作时会让NameNode生成一个空的Edits,将之前的Edits文件与
Fsimage拷贝
到SecondaryNameNode本地然后进行合并生成fsimage.chkpoint,并拷贝给NameNode,重
命名为 fsimage替换掉原来的
5.这时NameNode启动后只需要加载之前未合并的Edits和新生成的fsimage文件即可

浙公网安备 33010602011771号