HDFS流程(三)

HDFS流程

1.读流程

  1. 客户端发起RPC请求到NameNode
  2. NameNode在收到请求之后,查询到元数据,判断这个请求对应的路径是否存在
  3. 如果文件存在,NameNode会将第一个Block(默认情况下,一个Block对应三个地址)对应的存储地址放入一个队列中返回给客户端
  4. 客户端收到队列之后,从队列中取出这个Block对应的地址,从这些地址中选取一个较近(转发次数少的节点)的地址对应的DataNode来读取数据
  5. 客户端在读取完当前的Block之后,会对当前的Block进行一次chenksum的验证,保证数据的完整性;如果校验失败,则客户端会给NameNode报告错误信息,同时会重新选取地址重新读取;如果校验成功,则客户端会给NameNode发信息要下一个Block的地址
  6. 当客户端将所有的Block读取完成之后,客户端会再给NameNode发送信息通知NameNode关闭文件(实际上就是关流)

2. 写流程

  1. 客户端发起RPC请求到NameNode
  2. NameNode收到请求之后,进行校验:
    a:校验写入路径是否有权限操作
    b:检查指定路径下是否有同名文件
  3. 如果校验成功,NameNode会给客户端返回一个成功信号
  4. 客户端在收到信号之后,会和NameNode要第一个Block的地址
  5. NameNode在收到信号之后,会选取地址放入队列中返回给客户端
  6. 客户端收到地址之后,从中选取一个较近DataNode的节点来写入第一个副本,这个DataNode会通过pipeline(管道,NIO中的CHannel)将第二个副本写道其他的DataNode上,写完之后,从最后一个节点开始,会依次给前一个节点返回一个ack表示写入成功,直到最后返回给客户端
  7. 客户端在收到ack之后,会向NameNode要下一个Block的地址
  8. 直到所有的Block全部都写完,客户端就会给NameNode发送信息要求不要关闭文件(实际上就是关流),此时文件就不能改动。

3.删除流程

  1. 客户端发起RPC请求到NameNode
  2. NameNode在收到请求之后,查询元数据,校验当前客户端是否有删除权限;如果没有权限则直接报错;如果有这个权限,则记录edits,然后修改内存中元数据,会给客户端返回成功信号ack。注意,此时只是修改了元数据,该文件对应的Block实际上依然存储在DataNode上
  3. NameNode会等待DataNode的心跳,NameNode在收到心跳之后,会检查这个DataNode上的Block信息,如果发现Block信息和元数据不一致,NameNode就会相应心跳,返回指令,要求DataNode删除对应的Block,当DataNode收到指令删除之后,文件才真正的从HDFS上移除,

HDFS特点

  1. 能够存储超大的文件–切块
  2. 能够快速的应对和检测故障–心跳
  3. 能够进行动态扩展,并且能够构建在廉价机器上
  4. 不支持低延迟的响应,
  5. 高容错性–副本
  6. 不建议存储小文件
  7. 一次写入多次读取,在Hadoop2.0中,允许追加写入
  8. 基本上不支持事务
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值