HDFS内部原理解析

HDFS

定义:

它是一个分布式文件系统,用于存储大文件,分布式系统整合个多台机器的计算能力和存储能力,适合于一次写入数据,多次读出的场景,适合用于数据分析

组成架构:

HDFS架构

NameNode:
1,管理HDFS的命名空间
2,配置副本策略
3,管理数据块的映射信息
4,处理客户端的读写请求

DataNode:
1,存储实际的数据块
2,执行文件的的读写操作
3,负责块的创建,删除
SecondatyNameNode:
1,当NameNode出现故障的时候,分担工作但是会丢失部分数据
cilent 客户端
负责文件的切片(128M) 文件上传到HDFS的时候会切分成一个个的block块进行上传, 与NameNode进行交互, 获取文件的存储位置, 检查是否存在重复的文件, 与DataNode进行交互,读写数据

块: HDFS中的文件是以块的形式存储的,是按顺序划分,小文件是有可能存储在一台机器上,这是物理意义上的划分,默认大小在hadoop2.x版本是128,其大小可以根据磁盘读取速度进行调整

计算公式: 寻址时间=传输时间*1% (最优) 目前磁盘传输速率一般为100MB/S

优点:

  1. 高容错性:数据默认会备份三份,当某个副本数据丢失后可以自动恢复

  2. 适合处理大量数据 GB,TB,PB

  3. 可以构建在普通计算机中,将计算能力,存储能力统一调度起来

缺点:

  1. 不适合存储小文件

a)) 在namenode中以块划分作为存储元数据,其中每一个块的元数据信息大小在150B左右,如果存储大量的小文件,那么每一个小文件都有有一个内存元数据,namendoe的内存将很快被占满

b)) 大量的小文件会会增加寻址时间,然后数据处理时间远远小于寻址时间,不符合HDFS涉及原则

  1. 不适合低延时的数据处理,不具有实时性

HDFS写数据流程

在这里插入图片描述

1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。

2)NameNode返回是否可以上传。

3)客户端请求第一个 Block上传到哪几个DataNode服务器上。

4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。

5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。

6)dn1、dn2、dn3逐级应答客户端。

7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。

8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)

HDFS读数据流程

在这里插入图片描述

1)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。

2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。

3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。

4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

NameNode工作机制:

在这里插入图片描述

第一阶段:NameNode启动

1,第一次启动namenode后,创建Fsimage和Edits文件,如果不是第一次启动则直接加载两个文件到内存中

2,客户端对元数据进行增删改的请求

3,NameNode记录操作日志,更新滚动日志

4,NameNode在内存中对数据进行增删改

第二阶段:SecondaryNameNode工作

1,Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。

2,Secondary NameNode请求执行CheckPoint。

3,NameNode滚动正在写的Edits日志。

4,将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。

5,Secondary NameNode加载编辑日志和镜像文件到内存,并合并。

6,生成新的镜像文件fsimage.chkpoint。

7,拷贝fsimage.chkpoint到NameNode。

8,NameNode将fsimage.chkpoint重新命名成fsimage。

Fsimage与Edit

在这里插入图片描述

DataNode工作机制:

在这里插入图片描述

1,一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。

2,DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。

3,心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。

4,集群运行中可以安全加入和退出一些机器。

HDFS可靠性策略:

分布式文件系统(HDFS)的高可靠性主要是由多种策略及机制共同作用实现的。

主要有:

冗余副本策略

可以指定数据文件的副本数量,默认是3;

保证所有的数据块都有副本,不至于在一个datanode宕机后,数据的丢失。

数据备份数量不能高于datanode的数量, 假如有三个datanode 我们设置备份数量为4 则依然是每个datanode仅有一份数据, 当添加新的节点才会讲第四份数据进行备份,所以尽量避免这个问题

机架策略

集群一般放在不同机架上,机架间带宽要比机架内带宽要小;

HDFS具有“机架感知”能力,它能自动实现在本机架上存放一个副本,然后在其它机架再存放另一副本,这样可以防止机架失效时数据丢失,也可以提高带宽利用率。

心跳机制

Namenode周期性从datanode接收心跳信号和块报告,Namenode根据块报告验证元数据;
Namenode对没有按时发送心跳的datanode会被标记为宕机,不会再给它任何I/O请求;
datanode失效造成副本数量下降,并且低于预先设置的阈值,namenode会检测出这些数据块,并在合适的时机迕行重新复制;
引发重新复制的原因还包括数据副本本身损坏、磁盘错误,复制因子被增大等。

安全模式

Namenode启动时会先经过一个“安全模式”阶段,安全模式阶段不会产生数据写;
在安全模式阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的;
在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束;
当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数。

在这里插入图片描述

校验和

在文件建立时,每个数据块都产生校验和,校验和会保存在.meta文件内;
客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏;
如果正在读取的数据块损坏,则可以继续读取其它副本。

回收站

删除文件时,其实是放入回收站/trash,回收站里的文件可以快速恢复;
可以设置一个时间阈值,当回收站里文件的存放时间超过这个阈值,就被彻底删除,并且释放占用的数据块。

在这里插入图片描述

元数据保护

映像文件和事务日志是Namenode的核心数据,可以配置为拥有多个副本;
副本会降低Namenode的处理速度,但增加安全性。

快照机制

支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值