HDFS原理深入理解

1.HDFS概述

1)数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就 是分布式文件管理系统。

2)是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。

3)通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。

4)容错。即使系统中有某些节点宕机,整体来说系统仍然可以持续运作而不会有数据损失【通过副本机制实现】。

5)分布式文件管理系统很多,hdfs只是其中一种,不合适小文件。

2.hdfs架构

NameNode

NameNode是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。

文件包括:

fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。

edits:操作日志文件,namenode启动后一些新增元信息日志。

fstime:保存最近一次checkpoint的时间

以上这些文件是保存在linux的文件系统中。

hdfs-site.xml的dfs.namenode.name.dir属性

secondary namenode

DataNode

提供真实的文件数据存储服务。

[En]

Provide real file data storage service.

文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。2.0以后HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block.

hdfs-site.xml中dfs.blocksize属性

不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间 Replication。多复本。默认是三个。

hdfs-site.xml的dfs.replication属性

3.HDFS 写数据流程

HDFS原理深入理解

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

(2 )N ameNode 返回是否可以上传。

(3 )客户端请求第一个B lock 上传到哪几个D ataN ode 服务器上。

(4 )N ameNode 返回3 个D ataN ode 节点,分别为dn1、dn2、dn3。

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

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

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

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

4.HDFS读数据流程

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

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

(3 )DataNode 开始传输数据给客户端(从磁盘里面读取数据输入流,以P acket 为单位来做校验),先读距离最近的,然后一次读,串行读

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

5. NameNode和SecondaryNameNode工作机制

HDFS原理深入理解

1 )第一 阶段: NameNode 启动

(1 )第一次启动NameNode 格式化后,创建Fsimage和Edits 文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。

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

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

(4 )NameNode 在内存中对元数据进行增删改。

2 )第二 阶段: Secondary NameNode 工作

通常情况下,SecondaryNameNode每隔一小时执行一次。

[hdfs-default.xml]

dfs.namenode.checkpoint.period
  3600s

(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。

6 D ata N ode 工作 机制

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

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

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

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

Original: https://www.cnblogs.com/lmandcc/p/15321446.html
Author: lmandcc
Title: HDFS原理深入理解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/522713/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球