HDFS 系统架构原理
1. 定义
HDFS(Hadoop Distributed File System)是 Hadoop 项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。
HDFS 源于 Google 在 2003年 10月份发表的 GFS(Google File System)论文。它其实就是 GFS 的一个克隆版本。
2. 特点
高容错性
1.上传的数据自动保存多个副本。它是通过增加副本的数量,来增加它的容错性。
2.如果某一个副本丢失,HDFS 机制会复制其他机器上的副本,而我们不必关注它的实现。
支持超大文件
超大文件在这里指的是几百 MB、几百 GB 甚至几 TB 大小的文件,一般来说,一个 Hadoop 文件系统会存储 T(1TB=1024GB),P(1P=1024T)级别的数据。
流式数据访问
HDFS 处理的数据规模都比较大,应用一次需要访问大量的数据。同时,这些应用一般是批量处理,而不是用户交互处理。HDFS 使应用程序能够以流的形式访问数据集,注重的是数据的吞吐量,而不是数据访问的速度。
简化的一致性模型
大部分的 HDFS 程序操作文件时需要一次写入,多次读取。在 HDFS 中,一个文件一旦经过创建、写入、关闭后,一般就不需要修改了。这样简单一致性模型,有利于提供高吞吐量的数据访问模型。
3. 体系结构
1.Client(客户端)
-
1)实现文件切分
- 将文件切分成一个一个的数据块,然后在进行存储。
-
2)与 NameNode 交互,获取文件的位置信息
-
3)跟 DataNode 交互,读取对应的数据块。
- 我们实际上市在 DataNode 上读取数据
-
4)管理和访问 HDFS
- 我们可以通过客户端,对HDFS 进行增删改查
2.NameNode
Namenode 是 Master、管理者,是主从结构中主节点上运行的进程。
- 1)管理 HDFS 的名称空间
- 2)管理数据块的映射关系
- 3)配置副本策略
- 4)客户端的读写请求
3.DataNode
DataNode 就是 Slave,在从节点都会驻留一个数据节点的守护进程,它将 HDFS 数据块写到 Linux 本地文件系统的实际文件中,并不断将当前存储的数据块(block)报告给 namenode,并接受 namenode 的指令来创建、删除、移动本地磁盘的数据块。
- 1)实际存储的数据块
- 2)执行数据块的读/写操作
4.Block(数据块)
一个文件是被切分成多个 Block,并且每个 block 有多个副本,这些副本被分布在多个 datanode 上,它数据 HDFS 的最小存储单元。
5.元数据
是文件系统中文件和目录的信息以及文件和 block 的对应关系。
6.命名空间镜像(FSlmage)
HDFS 的目录树及文件/目录元信息是保存在内存中的,如果节点掉电或进程崩溃,数据将不再存在,必须将上述信息保存到磁盘,Fslmage 就是保存某一个时刻元数据的信息的磁盘文件。
7.镜像编辑日志(EditLog)
对内存目录树的修改,也必须同步到磁盘元数据上,但每次修改都将内存元数据导出到磁盘,显然是不现实的,为此,namenode 引入了镜像编辑日志,将每次的改动都保存在日志中,如果 namenode 机器宕机或者 namenode 进程挂掉后可以使用 FSImage 和 EditLog 联合恢复内存元数据。