Hadoop的核心组件HDFS架构是怎样的?有什么优缺点?今天我们来聊下

原文链接:http://www.ibearzmblog.com/#/technology/info?id=2a635c61d599ba1b344a31ed9ef0ca73

前言

Hadoop主要有两个核心项目,分别是HDFS(分布式文件存储系统)和YARN(资源管理器)。就是因为这两个的存在,才会衍生出Spark、MapReduce、HBase等组件。今天我们就来聊下HDFS的核心原理。
Hadoop的核心组件HDFS架构是怎样的?有什么优缺点?今天我们来聊下_第1张图片

概念

HDFS是Hadoop的核心子项目,是分布式数据存储的基础,是基于流式数据访问和处理超大文件的需求而开发的分布式文件系统。

主要特性

HDFS的主要有几个特性:

  1. 支持超大文件存储:指的是TB、PB的文件。
  2. 流式数据访问:读取一个超大文件是需要大量的时间,并不是马上就能完全读出来,而是一边读取一边进行处理。好比你在网上下载电影,一边下一边播那就是流式。
  3. 简单的一致性模型。
  4. 硬件故障的检测和快速应对。

系统架构

HDFS的系统角色一共有四种:NameNode(主节点)、SecondaryNameNode(备用节点)、DataNode(从节点)、Client(HDFS客户端),下面是它的架构图:
Hadoop的核心组件HDFS架构是怎样的?有什么优缺点?今天我们来聊下_第2张图片
每个HDFS都只有一个NameNode,一个SecondaryNameNode和至少一个DataNode。在HDFS的系统中,一个大型数据文件会被切分成多个数据块(Block),然后均衡的放在不同的DataNode上。看上述架构图,Client要对HDFS进行访问的时候,都是由NameNode对外提供服务。接下来对各个角色进行讲解。

NameNode(元节点)

NameNode是HDFS的主节点,里面主要负责管理文件系统的命名空间,维护着整个文件系统的目录树以及目录树中所有的子目录和文件。

这些信息都保存在两个文件上,一个是命名空间镜像,另一个是FsImage(文件系统镜像)。每次NameNode启动的时候,都会加载最新的命名空间镜像文件到内存中。

最后是一个文件是记录命名空间的编辑日志,称为Edit Log

SecondaryNameNode(从元节点)

SecondaryNameNode是NameNode的备用节点,也成为从元数据节点,主要用于定期合并FsImage和Edit Log。SecondaryNameNode的主要作用是辅助NameNode合并FsImage和Edit Log

FsImage文件是HDFS中元数据的一个检查点,这是个大文件,如果每个写操作都更新到这里面,那么会影响系统的运行。那么就出现了Edit Log,NameNode将命名空间的改动信息都载入到Edit Log中。但是到了后面,Edit Log也会逐渐增大,那么出现故障进行回滚的操作也要花很长时间。那么就需要定期地将Edit Log和FsImage进行合并,由于NameNode是负责对外提供服务的,如果进行合并的话会影响整个集群的运行,那么就出现了SecondaryNameNode。整体流程如下:

Hadoop的核心组件HDFS架构是怎样的?有什么优缺点?今天我们来聊下_第3张图片

  1. 首先SecondaryNameNode引导NameNode更新编辑日志,并将后续新的编辑都写入到edits.new中(图中的edits log(new))
  2. SecondaryNameNode通过Http get请求的方式将Fsimage和edits log从NameNode中复制到本地。
  3. SecondaryNameNode将fsimage文件导入内存,然后应用edits log,并将其合并成fsimage.ckpt,最后将其写入到磁盘中。
  4. SecondaryNameNode将新的fsimage传回给NameNode,NameNode收到后将其替换为fsimage,然后直接加载和启用该文件。
  5. 最后NameNode将edits.new改名为edits.log。

值得注意的是,这个过程出现下面其中一种情况就会触发:

  1. 这个过程每个1小时就会触发
  2. 当edits log的文件大小达到默认值64mb,这个大小可以设置

DataNode(数据节点)

DataNode也称为数据节点,上面也提到过,一份数据文件在放入hdfs的时候,它会被分成多个数据块(block),而这些数据块就会被存储到多个DataNode节点上的特定位置,块的名称为blk_blkID

DataNode会不停地向NameNode报告块的情况并执行来自NameNode的指令。

在集群初始化的时候,集群中每个DataNode会将本节点当前存储的块信息汇报给NameNode。当集群正常运行的时候,DataNode仍然会定期地将最新的块信息汇报给NameNode,同时接收NameNode的指令,包括创建、移动或者删除数据块等操作。

优缺点

说了这么多,那么HDFS的优缺点是什么呢?

优点

  • 高容错性,因为每份数据都会保存多个副本,某一个副本丢失即可自动恢复
  • 能够处理大数据文件
  • 流式文件访问,每个数据文件允许多次读取,一次写入,后续只能追加不能修改
  • 硬件要求不高

缺点

  • 不适合大量小文件存储,也就是说平时业务系统里的附件啊什么的就不要往上面堆了
  • 不允许并发写入,同一时间只能有一个线程对文件进行写操作。

结尾

在这个互联网时代,数据的增长已经开始超越我们的认知,所以能够从PB级的数据中提取有利的信息,也是很考究一个工程师的能力啊。后面我会讲解HDFS是如何实现高可用以及如何读取写入文件。

你可能感兴趣的:(hadoop,hdfs,大数据)