HDFS分布式文件储存系统

一,HDFS的储存机制(可参考HDFS的权威指南)

以块(block)储存

        hdfs在对文件进行储存时,默认按照128M(包含128M)的文件大小进行文件数局的拆分,将拆分的不同块数据储存在在不同的datanode服务器上,

副本机制

        为了保证hdfs的数据安全性,能够避免数据的丢失,hdfs会对每个块数据进行备份保存,在默认情况下备份会保存三份,叫做三副本

副本快是存储在不同的服务器上

默认的储存策略是由BlockPlacementPolicyDefault类支持。也就是日常生活中提到最经典的3副本策略。

1st  replica 如果写请求方所在其中的一个datanode,则直接存放在本地,否则 会随机在集群中任意选择一个datanode

2nd  replica 第二个副本存放在不同于第一个副本的所在框架,

3rd   replica 第三个副本会存放于第二个副本的所在机架,但属于不同服务节点

2,HDFS写入数据流程

1,client会发送文件上传请求,通过RPC与NameNode建立通讯,NameNode会检查目标文件是否存在,父目录是否存在,再返回是否可以上传

2,client请求第一个block该传输带哪一个datanode 服务器上。

3,NameNode根据配置文件中指定备份数量以及副本防治策略进行文件分配,返回可用的NomeNode的地址,

4、 client请求3台DataNode中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将整个pipeline建立完成,后逐级返回client;

5、 client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位(默认64K),A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答。

6、 数据被分割成一个个packet数据包在pipeline上依次传输,在pipeline反方向上,逐个发送ack(命令正确应答),最终由pipeline中第一个DataNode节点A将pipeline ack发送给client;

7、 当一个block传输完成之后,client再次请求NameNode上传第二个block到服务器。

3 HDFS数据读取流程

1、 Client向NameNode发起RPC请求,来确定请求文件block所在的位置;

2、 NameNode会视情况返回文件的部分或者全部block列表,对于每个block,NameNode都会返回含有该block副本的DataNode地址;

3、 这些返回的DN地址,会按照集群拓扑结构得出DataNode与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离Client近的排靠前;心跳机制中超时汇报的DN状态为STALE,这样的排靠后;

4、 Client选取排序靠前的DataNode来读取block,如果客户端本身就是DataNode,那么将从本地直接获取数据;

5、 底层上本质是建立FSDatainPutStream,重复的调用父类DataInputStream的read方法,直到这个块上的数据读取完毕;一旦到达块的末尾,FSDatainPutStream关闭连接并继续定位下一个块的下一个 DataNode;

6、 当读完列表的block后,若文件读取还没有结束,客户端会继续向NameNode获取下一批的block列表;一旦客户端完成读取,它就会调用 close() 方法。

7、 读取完一个block都会进行checksum验证,如果读取DataNode时出现错误,客户端会通知NameNode,然后再从下一个拥有该block副本的DataNode继续读。

8、 NameNode只是返回Client请求包含块的DataNode地址,并不是返回请求块的数据;

9、 最终读取来所有的block会合并成一个完整的最终文件。

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值