HDFS原理

HDFS原理

HDFS架构图

在HDFS中有三个模块
分别是:NameNode、SecondaryNameNode、DataNode

1.NameNode

NameNode是掌控全局的模块,主要作用有:
①.用来管理DataNode以及元数据;

  • 文件的上传时间
  • 文件权限
  • 文件的位置信息
  • block的Id

②.提供读写服务;
  接收来自Client的读写请求,返回BlockId、地址等信息
 
③.收集DataNode汇报的block信息以及心跳信息。

NameNode保存的metedata信息包括:
文件owership和permissions

  • 文件大小,时间
  • block列表:blockID
  • Block副本位置(由DataNode上报)

SecondrayNameNode

作用:持久化内存中的元数据,除了block的位置信息,其他元数据都会持久化

由于NameNode中产生的元数据都是在内存中,随着文件越来越大以及各种各样的原因,存放在内存中就会不稳定,我们可以使用SecondaryNameNode将元数据持久化到磁盘上来保证数据的稳定性。在持久化的信息中,没有block的位置信息,因为block的位置是有可能发送变动的,如果block位置信息发生变化,就会产生信息的不同步,降低集群的可用性。
在这里插入图片描述
首先,SecondaryNameNode会把NameNode中的edits和fsimage文件拉取过来,其中edits中存储的是NameNode的这个阶段的所有操作,fsimage则是空的文件,在SecondaryNameNode中,会根据edits重演NameNode的操作,并将产生的数据存放到fsimage中,最终合并到fsimage.ckpt中,然后把fsimage.ckpt推送到NameNode中。

DataNode

作用:
1.存储源数据(以block块的形式存储)
2.接收客户端的读请求
3.向NameNode发送心跳信息

写的流程

通过管道实现并行存储,同步的对block数据块进行写入与备份,写的时候把block块分成64K大小的packet通过管道开始源源不断的传输。
之所以会使用管道机制,是为了实现并行存储,这样会减少上传的时间,提高整个集群的可用性。
写操作的详细过程 1. 如果要上传一个大文件,client切割大文件,计算大文件block数,大文件地址/128M=block数量
2. client对NameNode汇报:
(1)当前大数据文件的block数
(2)当前大文件属于谁 权限
(3)上传时间
for(Block block:bocks(大文件切割出来的Block)){
3. client切割出来一个block
4. client请求block块的Id号以及地址
5. 因为NameNode能够掌控全局,管理所有的DN,所以它将负载不高的DN地址返回给client
6. client拿到地址后找到DN去上传数据
7. DN将block存储完毕之后会向NameNode汇报当前的存储情况
}

读的流程

1.client访问NameNode,查询元数据信息,获得这个文件的数据块位置

2.就近挑选一台datanode服务器,请求建立输入流 。

3.DataNode向输入流中写数据

4.关闭输入流

备份机制

1.第一个block存储在负载不是很高的一台服务器上

2.第一个备份的block存储在与第一个block不同机架的随机一台服务器上

3.第二个备份在与第一个block备份相同机架的不同服务器上

注意:集群的DataNode节点要大于等于副本数+1

权限

依据Linux的用户权限系统

安全模式

1.加载fsimage到内存中

2.如果edits文件不为空,那么NameNode自己来合并

3.检查DataNode的健康情况

4.如果有DataNode死亡,指挥做备份
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值