HDFS原理

HDFS

Hadoop Distributed File System(Hadoop分布式文件系统)

问题提出:当需要存储的数据很多很大,一台机器存储不了时,需要将数据切割成块,使用多台机器分布式存储这些数据

  • HDFS有3大主要角色:
    1. NameNode(以下简称NN)
    2. SecondaryNameNode(以下简称SNN)
    3. DataNode(以下简称DN)

NameNode的主要工作就是和Client(客户端)打交道,接受他们的请求,以及管理元数据1和集群(DataNode)。NameNode将元数据存储在内存中,但内存不稳定。若NN要将元数据写到磁盘中,则要经过复杂的IO操作,而且得锁内存,不能对外服务。这使整个系统效率大大降低,显然不可取。于是就出现了SecondaryNameNode。
SecondaryNameNode则负责帮NN分担任务量,持久化内存中的除block位置信息外的所有元数据。
DataNode的工作就是存储block数据,向Client提供读操作。

HDFS的主要工作流程:
一、上传文件操作(写操作)
Client往HDFS上传大文件

  1. Client计算大文件block数量=文件(地址)大小/128M
  2. Client向NameNode汇报:block数量、上传时间、属主以及权限
  3. Client切割出一个block
  4. Client向NameNode请求Id及地址
  5. NameNode将负载不高的DataNode返回给Client(适用于集群内上传,若为集群内上传则返回当前节点)
  6. Client根据返回的地址,向DataNode上传数据
    1. NameNode返回地址给Client后,这些地址的DataNode之间会形成pipeline管道
    2. Client将一个block切割成一个个packet(64K),然后源源不断的往管道输送
    3. DataNode从管道中获取packet并存储(存储过程并行发生)
  7. DataNode将block存储完成后,向NameNode汇报存储情况
  8. 重复步骤3~7直至文件全部上传完成

二、读取文件操作
Client需要读取存储在HDFS上的文件

  1. Client向NameNode发送读block请求,NameNode返回block的地址
  2. Client根据地址向DataNode请求block
  3. DataNode将block返回

三、备份机制
备份机制是为了保证数据安全,HDFS的默认数据备份数是2。当启用备份机制时,DataNode的数量必须大于等于数据备份数+1。

  1. 第一个副本(备份1)block存储在与原文件block(源)不同机架上的随机一台服务器上
  2. 第二个副本(备份2)存储在第一个副本相同的机架的其他随机一个服务器上

四、持久化
SecondaryNameNode将内存中的除block位置信息外的所有元数据都保存到磁盘中。NameNode中有两个数据结构:

  1. fsimage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
  2. 操作日志文件edits中记录了所有针对文件的创建、删除、重命名等操

SecondaryNameNode会获取NameNode的fsiamge和edits两个文件,此时NameNode会产生一个新的edits.new代替原来的edits工作。SecondaryNameNode对edits进行重演,产生出新的数据和fsiamge合并成fsiamge.ckpt,保存到磁盘中,再将fsiamge.ckpt发送给NameNode。NameNode接收到的新的fsiamge.ckpt替换旧的fsiamge文件,同时将edits.new替换edits文件

五、安全模式
HDFS每次启动时,都将启动安全模式加载数据。

  1. 加载fsimage到内存中
  2. 若edits文件不为空,则NameNode会合并edits和fsimage
  3. 检查DataNode的健康情况
  4. 若有DataNode挂掉了,指挥做备份

六、权限管理
HDFS的权限管理依据系统的用户系统。仅防君子,你说你是谁,HDFS就认为你是谁


  1. 元数据:描述数据的数据。这里是指的是block的数量、Id号、位置、上传时间、属主及权限等信息。 ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值