HDFS是HadoopDistributedFileSystem的简称,既然是分布式文件系统,首先它必须是一个文件系统,那么在Hadoop上面的文件系统会不会也像一般的文件系统一样由目录结构和一组文件构成呢?分布式是不是就是将文件分成几部分分别存储在不同的机器上呢?看完本文的HDFS解读,你就会明白的。

【前语】是蛮久木有写过关于hadoop的博客了额,尽管最近也看了一些关于linux的基础常识,但好像把这个东西忘记了,其实时不时回忆一下曾经的常识仍是蛮有意思的,且行且忆!咱们Hadoop首要由HDFS和MapReduce引擎两部分组成。***部是HDFS,它存储Hadoop集群中全部存储节点上的文件。HDFS的上一层是MapReduce引擎,该引擎由JobTrackers和TaskTrackers组成。这篇博客就首要来讲讲HDFS吧~~~

HDFS是HadoopDistributedFileSystem的简称,既然是散布式文件体系,首要它有必要是一个文件体系,那么在Hadoop上面的文件体系会不会也像一般的文件体系相同由目录结构和一组文件构成呢?散布式是不是便是将文件分红几部分别离存储在不同的机器上呢?HDFS到底有什么长处值得这么借题发挥呢?

好吧,让咱们带着疑问一个个去探究吧!

一、HDFS基本概念

1、数据块

HDFS默许的最基本的存储单位是64M的数据块,这个数据块能够了解和一般的文件里边的分块是相同的

2、元数据节点和数据节点

元数据节点(namenode)用来办理文件体系的命名空间,它将全部的文件和文件夹的元数据保存在一个文件体系树中。

数据节点(datanode)便是用来存储数据文件的。

从元数据节点(secondarynamenode)不是咱们所幻想的元数据节点的备用节点,其实它首要的功用是首要功用便是周期性将元数据节点的命名空间镜像文件和修正日志兼并,以防日志文件过大。

这儿先来弄清楚这个三种节点的联系吧!其实元数据节点上存储的东西就相当于一般文件体系中的目录,也是有命名空间的映射文件以及修正的日志,仅仅散布式文件体系就将数据散布在各个机器上进行存储算了,下面你看看这几张阐明图应该就能理解了!

分布式文件体系HDFS解读(分布式文件系统HDFS体系结构)  HDFS 分布式文件系统 第1张

分布式文件体系HDFS解读(分布式文件系统HDFS体系结构)  HDFS 分布式文件系统 第2张

分布式文件体系HDFS解读(分布式文件系统HDFS体系结构)  HDFS 分布式文件系统 第3张

Namenode与secondarynamenode之间的进行checkpoint的进程。

3、HDFS中的数据流

读文件

客户端(client)用FileSystem的open()函数翻开文件,DistributedFileSystem用RPC调用元数据节点,得到文件的数据块信息。关于每一个数据块,元数据节点回来保存数据块的数据节点的地址。DistributedFileSystem回来FSDataInputStream给客户端,用来读取数据。客户端调用stream的read()函数开端读取数据。DFSInputStream衔接保存此文件***个数据块的最近的数据节点。Data从数据节点读到客户端(client),当此数据块读取结束时,DFSInputStream封闭和此数据节点的衔接,然后衔接此文件下一个数据块的最近的数据节点。当客户端读取结束数据的时分,调用FSDataInputStream的close函数。

整个进程便是如图所示:

分布式文件体系HDFS解读(分布式文件系统HDFS体系结构)  HDFS 分布式文件系统 第4张

写文件

客户端调用create()来创立文件,DistributedFileSystem用RPC调用元数据节点,在文件体系的命名空间中创立一个新的文件。元数据节点首要确认文件本来不存在,而且客户端有创立文件的权限,然后创立新文件。DistributedFileSystem回来DFSOutputStream,客户端用于写数据。客户端开端写入数据,DFSOutputStream将数据分红块,写入dataqueue。Dataqueue由DataStreamer读取,并告诉元数据节点分配数据节点,用来存储数据块(每块默许仿制3块)。分配的数据节点放在一个pipeline里。DataStreamer将数据块写入pipeline中的***个数据节点。***个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。DFSOutputStream为发出去的数据块保存了ackqueue,等候pipeline中的数据节点奉告数据现已写入成功。假如数据节点在写入的进程中失利:封闭pipeline,将ackqueue中的数据块放入dataqueue的开端。

整个进程如图所示:

分布式文件体系HDFS解读(分布式文件系统HDFS体系结构)  HDFS 分布式文件系统 第5张

二、HDFS构架与规划

Hadoop也是一个能够散布式处理大规划海量数据的软件结构,这全部都是在牢靠、高效、可扩展的基础上。Hadoop的牢靠性——因为Hadoop假规划算元素和存储会呈现毛病,因为它保护多个作业数据副本,在呈现毛病时能够对失利的节点从头散布处理。Hadoop的高效性——在MapReduce的思维下,Hadoop是并行作业的,以加速使命处理速度。Hadoop的可扩展——依赖于布置Hadoop软件结构核算集群的规划,Hadoop的运算是可扩展的,具有处理PB级数据的才能。

Hadoop首要由HDFS(HadoopDistributedFileSystem)和MapReduce引擎两部分组成。***部是HDFS,它存储Hadoop集群中全部存储节点上的文件。HDFS的上一层是MapReduce引擎,该引擎由JobTrackers和TaskTrackers组成。

HDFS能够履行的操作有创立、删去、移动或重命名文件等,架构类似于传统的分级文件体系。需求留意的是,HDFS的架构根据一组特定的节点而构建(参见图2),这是它本身的特色。HDFS包含仅有的NameNode,它在HDFS内部供给元数据服务;DataNode为HDFS供给存储块。因为NameNode是仅有的,这也是HDFS的一个缺点(单点失利)。一旦NameNode毛病,结果可想而知。

1、HDFS构架(如图所示)

分布式文件体系HDFS解读(分布式文件系统HDFS体系结构)  HDFS 分布式文件系统 第6张

2、HDFS的规划

1)过错检测和快速、自动的康复是HDFS的中心架构方针。

2)比之重视数据拜访的低推迟问题,更要害的在于数据拜访的高吞吐量。

3)HDFS运用对文件要求的是write-one-read-many拜访模型。

4)移动核算的价值比之移动数据的价值低。

3、文件体系的namespace

Namenode保护文件体系的namespace,全部对namespace和文件特点进行修正的都会被namenode记载下来,连文件副本的数目称为replication因子,这个也是由namenode记载的。

4、数据仿制

Namenode全权办理block的仿制,它周期性地从集群中的每个Datanode接纳心跳包和一个Blockreport。心跳包的接纳表明该Datanode节点正常作业,而Blockreport包含了该Datanode上全部的block组成的列表。HDFS选用一种称为rack-aware的战略来改善数据的牢靠性、有效性和网络带宽的运用。完成对副本的寄存。

5、文件体系元数据的耐久化

Namenode在内存中保存着整个文件体系namespace和文件Blockmap的映像。这个要害的元数据规划得很紧凑,因此一个带有4G内存的Namenode满足支撑海量的文件和目录。当Namenode启动时,它从硬盘中读取Editlog和FsImage,将全部Editlog中的业务效果(apply)在内存中的FsImage,并将这个新版本的FsImage从内存中flush到硬盘上,然后再truncate这个旧的Editlog,因为这个旧的Editlog的业务都现已效果在FsImage上了。这个进程称为checkpoint。在当时完成中,checkpoint只发生在Namenode启动时,在不久的将来咱们将完成支撑周期性的checkpoint。

6、通信协议

全部的HDFS通讯协议都是构建在TCP/IP协议上。客户端经过一个可装备的端口衔接到Namenode,经过ClientProtocol与Namenode交互。而Datanode是运用DatanodeProtocol与Namenode交互。从ClientProtocol和Datanodeprotocol笼统出一个长途调用(RPC),在规划上,Namenode不会自动建议RPC,而是是呼应来自客户端和Datanode的RPC恳求。

HDFS不是这么简略就能说清楚的,在今后的博客中我还会持续研讨hadoop的散布式文件体系,包含HDFS的源码剖析等,现因为时刻有限,暂时只做了以上一些简略的介绍吧,期望对我们由此对HDFS有必定的了解!

转载请说明出处
知优网 » 分布式文件体系HDFS解读(分布式文件系统HDFS体系结构)

发表评论

您需要后才能发表评论