HDFS架构设计

HDFS架构设计

这里写图片描述

NameNode:
存储:文件系统的命名空间:
1.文件名称
2.文件目录结构
3.文件的属性(权限 创建时间 副本数)
4.文件对应哪些数据块 –> 这些数据块对应哪些DataNode节点上。
不会持久化存储这个映射关系,是通过集群的启动和运行时,DataNode定期发送blockReport给NameNode,以此NameNode在【内存】中动态维护这种映射关系
作用:
管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录,
这些信息以两个文件形式永久保存在本地磁盘上。
命名空间镜像文件fsimage和编辑日志文件editlog。

DataNode:
存储:数据块和数据块校验和
与NameNode通信:
1.每隔3秒发送一个心跳包,参数可配置
2.每隔10次心跳发送一次blockReport(30s)
作用(主要):读写文件的数据块

Scondary NameNode
这里写图片描述

存储:命名空间镜像文件fsimage+编辑日志editlog
作用:定期合并fsimage+editlog文件为新的fsimage推送给NamenNode.俗称检查点动作,checkpoint.
参数:dfs.namenode.checkpoint.period:3600 秒

副本放置策略
这里写图片描述
第一副本:放置在上传文件的DataNode上;如果是集群外提交,则随机挑选一台磁盘不太慢、CPU不太忙的节点上
第二副本:放置在与第一个副本不同的机架的节点上
第三副本:与第二个副本相同机架的不同节点上
如果还有更多的副本:随机放在节点中

HDFS读流程
这里写图片描述
1.Client通过FileSystem.open(filePath)方法,去与NameNode进行RPC通信,返回该文件的部分或全部的block列表(也包含该列表各block的分布在DataNode地址的列表),也就是返回FSDataInputStream对象;
2.Client调用FSDataInputStream.read()方法,
a.去与第一个块的最近的Datanode进行read,读取完毕后会check,若sucessful,会关闭与当前Datanode通信;若check fail,会记录失败的块和DataNode信息,下次就不会读取,那么就会去该块的第二个DataNode地址读取;
b.然后去第二个块的最近的DataNode上的进行读取,check后,会关闭与此DataNode的通信;
假如block列表读取完了,文件还未结束,那么FileSystem会从NameNode获取下一批的block的列表;(当然读操作对于 Client 端是透明的, , 感觉就是连续的数据流)
3.Client调用FSDataInputStream.close()方法,关闭输入流

HDFS写流程
这里写图片描述
1.Client调用FileSystem.create(filePath)方法,去与NameNode进行RPC通信,check该路径的文件是否存在以及有没有权限创建该文件,假如ok,就创建一个新文件,但是并不关联任何block,返回一个FSDataOutputStream对象;假如not ok,就返回错误信息,所以写代码要try-catch
2.Client调用FSDataOutputStream.write()方法,将第一个块写入第一个Datanode,第一个Datanode写完传给第二个节点,第二个写完传给第三节点,当第三个节点写完返回一个ack packet给第二个节点,第二个返回一个ack packet给第一个节点,第一个节点返回ack packet给FSDataOutputStream对象,意思标识第一个块写完,副本数为3;然后剩余的块依次这样写;((当然写操作对于 Client端也是透明的)
3.当向文件写入数据完成后,Client调用FSDataOutputStream.close()方法,关闭输出流,flush缓存区的数据包;
4.再调用FileSystem.complete()方法,告诉Namenode节点写入成功

JournalNode

这里写图片描述
上面在Active Namenode与StandBy Namenode之间的绿色区域就是JournalNode,当然数量不一定只有1个,作用相当于NFS共享文件系统.Active Namenode往里写editlog数据,StandBy再从里面读取数据进行同步.

若泽大数据交流群:671914634

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值