HDFS 分布式文件系统架构原理

HDFS 系统架构原理

@数据分析-jacky

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 联合恢复内存元数据。

4. 读写数据流程

@数据分析-jacky

原文地址:https://www.cnblogs.com/shujufenxi/p/14413646.html