HDFS的架构及原理

读文件:

client node启动client JVM 调用FileSystem的open方法获取DistributedFileSystem实例

DistributedFileSystem通过RPC从nameNode获取第一批block的locations,这些block通过拓扑排序, 优先级:同节点>同机架>其他机架

前两步会返回一个FSDataInputStream对象,该对象呗封装成DFSInputStream对象,此对象可以管理DN和NN的数据流,客户端调用read方法,DFSInputStream就会找出离客户端最近的DN并连接.

数据从DN流向客户端

如果第一个block读完了,就关闭指向第一block块的DN链接,接着读下一个block

如果第一批block都读完了,DFSInputStream去NN拿下一批block的location,如果所有的block都读完,则关闭所有的流


写入文件:

首先把文件切分成block.

client一般都是把文件写入到3个DN中,所以NN中要增加一个文件,放到目录树中,存放元数据?,NN要返回3个DN的位置,client先拿到最近的DN的位置

每次写入一个packet大小(默认64K),第一个64k写到第一个节点上,再写下一个64k,当第一数据块写完,第一个DN再把数据传给第二个DN,以此类推..形成数据写入流水线

当最后一个节点写完了,会传递给前一个节点通知,当第一个节点收到此通知后,开始写下一个数据块

当所有数据块写完后,关闭所有的流,并通知NN,文件写完了.


副本存放策略

Hadoop 0.17之前的副本策略

        第一个副本:存储在同机架的不同节点上。

        第二个副本:存储在同机架的另外一个节点上。

        第三个副本:存储在不同机架的另外一个节点。

        其它副本:选择随机存储。

Hadoop 0.17 之后的副本策略

        第一个副本:存储在同 Client 相同节点上。

        第二个副本:存储在不同机架的节点上。

        第三个副本:存储在第二个副本机架中的另外一个节点上。

        其它副本:选择随机存储。







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值