HDFS存储文件的过程详解

以下内容基本都是自己的语言进行描述的,并不全是官方的说法,若有哪里说的不对可以在下面进行交流。

一 、角色 : Namenode ,DataNode ,Client

  1 NameNode

    namenode 负责维护整个文件系统的信息,包括:整个文件树,文件的块分布信息,文件系统的元数据,数据复制策略等 以下简称NN

2  DataNode

存储文件内容,负责文件实际的读写操作,保持与namenode的通信,同步文件块信息 以下简称DN

3 Client 

  发出存储文件请求 以下简称C  

二  具体过程

1  C 向NN发出创建文件请求 客户端可以指定两个变量 ① dfs.replcation :3 ② block.size:128m 【副本数默认为3,块大小默认为128M】 切分文件block【hdfs的传输单位】

此时NN 要做以下事情:

(1) 检查C是否有创建文件权限

(2) 检查目录结构是否可用

(3) 检查集群是否可用

(4) 检查租约(HDFS会给每一个客户端一个租约lease,通过租约的持有来限制并行写入文件)

2  NN在以上校验都通过的情况下会给客户端一个返回确认信息。

3 客户端拿到确认信息后,发出addblock 操作。

(1)此时NN会给block分配可以写入的DN信息,分配考虑的因素有  ① 数据可靠性 ② 数据的写入效率 ③ DN的负载均衡策略

(2)默认的分配DN的策略是:第一个副本存入离客户端最近的机架的DN上,第二个副本存入与第一个副本不同机架上的DN,第三个副本存放在与第二个同一机架上不同DN上。

4 考虑以上因素后会返回给客户端可写入的DN节点队列。

5 客户端收到DN队列信息后,以pipeline形式写入block数据。在写入过程中每个步骤都会有ack确认,当得到成功写入副本的数量小于最小写入副本数时,会重新发送此写请求。最小写入副本数默认是1 ,与此同时DN和NN也会进行心跳,对于那些副本小于三的进行副本的生成,生成考虑的策略与选择DN节点需要考虑的一致。

6 当client收到ack消息确认完成后,向NN汇报block完成。

7 添加下一个block【从3流程开始】。

8 最终客户端汇报完成,NN更新文件状态,客户端释放租约

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值