目录:

一、HDFS是什么

二、HDFS核心工作机制

三、客户端上传数据到HDFS流程图

四、HDFS下载数据流程图

五、NameNode元数据管理原理分析

六、Checkpoint机制

七、HDFS的优缺点


一、HDFS是什么

HDFS是一个分布式文件系统(管理服务:提供文件的读取服务、写入服务、查看目录信息服务)

二、HDFS核心工作机制

HDFS是一套分布式软件系统,里面有很多服务角色:namenode、datanode、secondary namenode、客户端;
文件在HDFS中分块存储的,一个文件会被分成多个块(按照128M分块),每个块“随机”存储在集群中的某些datanode上;
每个块都有一个唯一的块ID;
每个块在HDFS中可以存储多个副本!(默认3个副本);
namenode负责管理元数据(hdfs系统的目录树,每个文件的具体路径、块信息、物理存储位置、副本数量),并为客户端提供查询服务;
datanode负责管理文件块(帮客户端存储块,帮客户端取块)

三、客户端上传数据到HDFS流程图

hdfs数据大小重排序 hdfs按时间排序_hdfs数据大小重排序


问题:

(1)传输block_0数据传完以后,在传输block_1的吗?

答:不是的,它是队列一起发送的。

(2)第4步的hdp1、hdp2、hdp3是怎么选择的?
答:是根据client选择的,hdp1是离client最近的,hdp2和hdp3是根据hdp1选择的。

(3)在请求建立通道和应答成功的步骤失败,还会进行下一步上传数据吗?
答:不会的,建立通道和应答成功的步骤失败,就会抛出异常,连接不上。

(4)在传输数据失败的时候,就会抛出异常,不能进行传输吗?
答:不一定,客户端往hdp01传输数据的时候,如果失败,就会挂掉抛出异常;但是hdp01往hdp02(hdp02往hdp03)上传输数据失败的话,还是会hdp02还是会给hdp01发送已经收到的消息,如果副本数量不够的情况下,会触发自动备份。

四、HDFS下载数据流程图

hdfs数据大小重排序 hdfs按时间排序_客户端_02


问题:

(1)namenode给client返回存储数据的节点,client是怎么选择从哪台节点上选择建立通道拉取数据的?

答:就近原则,client会选择离它最近的一台节点上建立通道拉取数据。

(2)如果在client在hdp1建立通道的过程中,没用应答,client会怎么做?
答:client会在接着去hdp2建立通道,如果还是不成功,会接着向hdp3建立通道,还是不成功的话才会抛出异常,有一台节点成功,就会进行拉取数据。

五、NameNode元数据管理原理分析

(1)概述
首先明确namenode的职责:响应客户端请求,管理元数据。

Namenode对元数据有三种存储方式:
A.内存元数据
B.磁盘元数据镜像文件
C.数据操作日志文件(可通过日志运算出元数据)

细节:
HDFS不适合存储小文件的原因,每个文件都会产生元信息,当小文件多了,元信息也就会多了,对namenode会产生压力。
(2)对三种存储机制的进一步解释
内存元数据:
就是当前namenode正在使用的元数据,是存储在内存当中的。

磁盘元数据镜像文件:
是内存元数据的镜像,保存在namenode工作目录中,它是一个准元数据,作用是在namenode宕机时能够快速的恢复元数据。称为fsimage。

数据操作日志文件:
是用来记录元数据操作的,在每次改动元数据时都会追加日记记录,如果有完整的日志就可以还原完整的元数据。主要作用是用来完善fsimage,减少fsimage和内存元数据的差距。称为editslog。

六、Checkpoint机制

因为namenode本身的任务就非常重,为了不再给namenode压力,日志合并到fsimage就引入了另一个角色secondarynamenode。secondarynamenode负责定期把editslog合并到fsimage,“定期”是namenode向secondarynamenode发送RPC请求的,是按时间或者日志记录条数为“间隔”的,这样即不会浪费合并操作又不会造成fsimage和内存元数据有很大的差距。因为元数据的改变频率是不固定的。

  第一次进行checjpoint操作时,会由secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint)。

1)namenode向secondarynamenode发送RPC请求,请求checkpoint操作,将editslog合并到fsimage。

2)secondarynamenode收到请求后从namenode上读取(通过http服务)editslog(多个,滚动日志文件)和fsimage文件。

3)secondarynamenode会根据拿到的editslog合并到fsimage。形成最新的fsimage文件。(中间有很多步骤,把文件加载到内存,还原成元数据结构,合并,再生成文件,新生成的文件名为fsimage.checkpoint)。

4)secondarynamenode通过http服务把fsimage.checkpoint文件上传到namenode,并且通过RPC调用把文件改名为fsimage。

namenode和secondary namenode的工作目录存储结构完全相同,所以,当namenode故障退出需要重新恢复时,可以从secondary namenode的工作目录中将fsimage拷贝到namenode的工作目录,以恢复namenode的元数据。

hdfs数据大小重排序 hdfs按时间排序_客户端_03

七、HDFS的优缺点

优点:
高容错性:
数据自动保存多个副本:副本丢失后,自动恢复
合适批处理:移动计算而非数据
适合大数据处理:GB、TB、PB级数据,百万以上的文件数量规模,10K+节点规模

缺点:
读写模式:一个文件只能有一个写者,仅支持append,不能随机修改
不适合低延迟访问:多轮RPC调用
小文件:
元数据信息存储在NameNode内存中
一个block meta data大约150byte内存,存储1亿block大约需要20GB
如果一个文件10K,1亿个文件大小仅为1TB
一个NameNode节点的内存是有限的
争取大量小文件消耗大量的寻道时间
拷贝大量小文件vs拷贝一个大文件