HDFS读写数据流程

HDFS读写数据流程

写数据流程

就是将客户端的数据上传到HDFS

写数据宏观流程

-客户端向HDFS发送写数据请求
		--hdfs dfs -put tomcat.tar.gz /xxxxx/gy
		
-hdfs通过rpc调用nn的create方法
		--nn首先检查是否有足够的空间权限等条件创建这个文件,或者这个路径是否已经存在
			---没有:直接抛出对应的异常
			---有:NN创建一个空的Entry对象,并返回成功状态给HDFS
			
-HDFS如果接收到成功状态,会创建一个对象 FSDataOutputStream的对象给客户端使用

-客户端需要向NN询问第一个Block存放的位置
		--NN通过机架感知策略 (node1 node 2 node8)
		
-需要将客户端和DN节点创建连接
		--pipeline(管道)
			---客户端和node1创建连接,Socket
			---node1和node2创建连接 socket
			---node2 和Node8创建连接 socket
			
-客户端按照块block切分数据,但是按照packet发送数据
		--默认一个packet大小为64K
		
-客户端通过pipeline管道开始使用FSDataOutputStream对象将数据输出
		--客户端首先将一个packet发送给node1,同时给予node1一个ack状态
		--node1接受数据后会将数据继续传递给node2,同时给予node2一个ack状态
		--node2接受数据后会将数据继续传递给node8,同时给予node8一个ack状态
		--node8将这个packet接受完成后,会响应这个ack给node2为true
		--node2会响应给node1 ,同理node1响应给客户端 
		
-客户端接收到成功的状态,继续发送packet,直到当前块所有的packet都发送完成

-如果客户端接收到最后一个pakcet的成功状态,说明当前block传输完成

-客户端会将这个消息传递给NN,NN确认传输完成
		--NN会将block的信息记录到Entry
		--block1 (node1 node2 node8)
		--block2 (node1 node8 node16)
		--....
		--blockn(node1 node7 node9)
		
-客户端会继续向NN询问第二个块的存储位置
		--NN继续机架感知(n1 node8 node16)
		
-关闭FsDataOutPutStream

在这里插入图片描述
写数据微观流程

-首先客户端从自己的硬盘以流的方式读取数据文件到自己的缓存中

-然后将缓存中的数据以chunk(512B)和checksum(4B)的方式放入到packet(64K)

-当packet满的时候加入到 添加到 queue ,其实datascanner在取出的时候,这边一直也在加入

-datascanner负责从发送队列上取出(同时删除)一个packet,通过FSDataOPS发送到Pipleline

-datascanner也会将发送出去的packet添加到 ack queue队列上

-如果某一个packet的ack为true,那么久从ackqueue删除掉这个packet 

-如果某一个packet的ack为false,将ackqueue中所有的packet重新挂载到 发送队列,重新发送

在这里插入图片描述



读数据流程

-首先客户端发送请求到DFS,申请读取某一个文件
		--/xxxxx/gy/tomcat.tar.gz
		
-DFS去NN查找这个文件的信息(权限,文件是否存在)
		--如果文件不存在,抛出指定的错误
		--如果文件存在,返回成功状态
		
-DFS创建FSDataInputStream对象,客户端通过这个对象读取数据

-客户端获取文件第一个Block信息,返回DN1 DN2 DN8

-客户端直接就近原则选择DN1对应的数据即可

-依次类推读取其他块的信息,直到最后一个块,将Block合并成一个文件

-关闭FSDataInputStream

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值