Hadoop 三大组件之HDFS


HDFS(Hadoop Distributed Filed System)分布式文件系统是Hadoop三大组件之一,提供分布式数据存储解决方案,可以在多台服务器上构建存储集群,存储海量的数据。

1. HDFS架构

HDFS是典型的主从模式架构,一个HDFS集群,是由一个NameNode和多个DataNode组成,如下图:

在这里插入图片描述

HDFS基础架构包含三个角色,NameNode,DataNode,SecondaryNameNode,三者关系如下图所示:
在这里插入图片描述

1.1 NameNode

  • HDFS系统的Master主角色,是一个独立的进程
  • 负责管理HDFS整个文件系统的元数据信息及客户端对文件的访问
  • 负责管理DataNode

1.2 DataNode

  • HDFS系统的Slave从角色,是一个独立进程
  • 一般是一个节点一个,负责管理它所在节点上的数据存储,包含存入数据和取出数据

1.3 SecondaryNameNode

  • 辅助NameNode,是一个独立的进程
  • 帮助NameNode完成元数据的整理

2. HDFS存储原理

2.1 分布式文件存储

在存储时,一个文件被分成一个或多个数据块(Block块),是HDFS中最小存储单元,每个256MB(可以修改),这些块存储在一组Datanode上,便于统一管理;
每个服务器节点负责数据的一部分,同时每个Block块还可以配置多个副本(备份),存放在不同的服务器上,提高了数据的安全性;

2.2 NameNode元数据管理

edits文件:

edits文件记录了HDFS中的每一次操作,以及本次操作影响的文件及其对应的Block块,包含新增、删除、移动等,随着不断的记录,edits文件变的越来越大,会存在多个edits文件,确保不会有超大的edits文件的存在,保证检索性能。
在这里插入图片描述
但是随着edits文件的增多,如果用户查询一个文件,要到全部的edits文件中查询,效率还是非常低,因此需要合并所有的edits文件,只得到每个文件的最终操作。比如,一个文件新增,然后删除,在新增,只记录最终的一次新增记录即可,这样数据量就会大大的减少。

FSImage文件:
FSImage文件就是将全部的edits文件合并为最终结果,得到一个FSImage文件

NameNode元数据管理:
NameNode是基于edits和FSImage文件的配合,完成整个文件系统的管理。整个流程为:

  1. 每次对HDFS的操作,均会被edits文件记录
  2. edits文件达到一定的大小后,开启新的edits记录
  3. 定期进行edits的合并操作,如果当前没有fsimage文件,则将全部的edits文件合并称为第一个fsimage文件;如果当前已经存在fsimage文件,将全部edits和已经存在的fsimage进行合并,形成新的fsimage文件
  4. 重复以上流程

整个元数据合并是辅助角色SecondaryNameNode来操作的,SecondaryNameNode会通过http从NameNode拉取数据(edits和fsimage),然后合并完成后,供给nameNode使用。

在对元数据信息合并的时候基于两种方式,一个是时间,默认1个小时;第二个是100w次的事务,只要有一个条件达到就会触发元数据合并操作。

3. HDFS读写流程

3.1 HDFS写入流程

在这里插入图片描述

  1. 首先客户端向NameNode发起写入操作的请求
  2. NameNode审核权限、剩余空间等条件,满足条件条件后,告知客户端写入的DataNode地址
  3. 客户端向指定的DataNode发送数据包,开始写入操作
  4. 被写入数据的DataNode同时完成数据副本的复制工作,将其接收的数据分发给其他DataNode,其他DataNode复制之后再发送给下一个DataNode
  5. 写入操作完成后,客户端通知NameNode,NameNode做元数据记录工作

注意:

  • NameNode不负责数据的写入操作,只负责元数据记录和审批权限
  • 客户端会向最近(网络距离)的一台服务器(DataNode)写入数据
  • 数据块的副本的复制工作,由由DataNode之间自行完成(构建一个PipLine,按顺序复制分发)

3.2 HDFS数据读取

在这里插入图片描述

  1. 客户端向NameNode申请读取文件
  2. NameNode判断客户端权限等条件后,允许读取,并返回此文件的Block列表
  3. 客户端拿到要读取的Block列表后,开始读取DataNode上的数据

注意:

  • 数据同样不通过NameNode提供
  • NameNode提供的block列表,会基于网络距离计算尽量提供离客户端最近的,加速读取

网络距离:

  • 最近的网络距离就是同一台机器
  • 然后是同一个局域网(交换机)
  • 其次是跨越交换机
  • 再其次是跨越数据中心

HDFS内置网络距离计算算法,可以通过IP地址、路由表来推断网络距离

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值