HDFS读写原理解析

读取数据原理

  1. 客户端访问namenode,发送读取数据请求
  2. namenode接收到用户发来的请求,首先会进行一系列的判断,判断用户是否有权限、判断目录下是否有对应文件等等,若未通过层层判断就报错,若均通过则根据机架感知原理、网络拓扑关系、副本机制返回部分或全部block所在的datanode的地址(文件过大时会分批处理)
  3. 客户端收到block列表后,开始并行连接datanode节点读取数据
  4. 数据读取完毕后,如果之前获取的是部分block列表的地址,那么会再次请求namenode,返回剩余block的datanode地址列表继续第三步,直到将所有block全部读取下来
  5. 最后按照block排序,将一个个block拼接起来合成一个最终文件呈现给用户

写入数据原理

  1. 首先客户端访问namenode,发送写入数据请求
  2. namenode收到请求后会进行一系列判断,包括用户是否具备相应权限、在写入目录下这个文件是否存在等等,若未通过判断则报错,若均通过则通知客户端可以上传
  3. 客户端收到允许通知将文件切分为128M的block
  4. 客户端向namenode发送请求,询问第一个block存储在那些地方
  5. namenode根据几家感知原理、网络拓扑关系、副本机制等找到相应的可以上传的datanode连接列表,返回给客户端
  6. 客户端从接收到的datanode列表中选择第一台datanode与之相连建立管道
  7. 当连接好第一台datanode后,第一台与第二台连接,第二台与第三台连接形成一条pipeline管道
  8. 客户端以package包的形式(每个64KB)发送数据,第一个datanode接受完之后发送第二个,第二个接收好之后发送给第三个
  9. 当最后一个接收请求后会建立一个反向的应答队列,当而每个节点都接收完成数据包之后,依次向客户端发送ack应答机制
  10. 此时数据开始源源不断发送传输,当第一个block发送完成之后,客户端会重新请求namenode第二个block块应该存储在哪些datanode中,接着从第五步继续,直到所有的block全部写入完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值