HDFS高可用性机制|青训营笔记

246 阅读6分钟

这是我参与「第四届青训营」笔记创作活动的第1天

学习内容为《HDFS高可用性机制》,内容包括 元数据高可用、数据存储高可用。

介绍:

  1. Hadoop是目前主流的开源云计算系统,它实现了一个高可扩展的分布式文件系统一一HDES(Hadoop Distributed File System);HDFS作为Hadoop底层基础设施,为云计算提供高可靠、高性能的存储服务。HDFS在很大程度上借鉴了GoogleGFS文件系统的设计思想,具有高度容错、支持大数据集等诸多特性。
  2. 根据我们的实践经验,在使用以上方案解决实际问题时,需要具备以下几点基础: ·首先是对NameNode元数据机制有较深的理解和把握; ·其次要对各种解决方案的运行机制及使用方法有个全面掌握; ·再次就是要有较强的实践操作经验。
  3. 所谓元数据( Metadata)就是指数据的数据。 HDFS的元数据就是指维护HDFS文件系统中的文件和目录所需要的信息。
  4. 需要注意的是,具体的文件内容不是元数据,元数据是用于描述和组织具体的文件内容,如果没有元数据﹐具体的文件内容将变得没有意义。元数据的作用十分重要,它的可用性直接决定了HDFS 的可用性。
  5. 从形式上讲,元数据可分为内存元数据和元数据文件两种。其中 NameNode在内存中维护整个文件系统的元数据像,用于HDFS的管理;元数据文件则用于持久化存储。

高可用

高可用的衡量

image.png

高可用的需求

  1. 高可用在困境中仍可工作,降低用户感知。故障不可避免,灾难时有发生。
  2. 故障类型:硬件故障、软件故障、人为故障;
  3. 灾难(数据中心级别不可用):机房断电、机房空调停机、机房间网络故障/阻塞;
  4. 如果HDFS不可用:

系统架构

image.png

高可用的形式

  1. 服务高可用:热备份、冷备份.
  2. 故障恢复操作:人工切换、自动切换
  3. HDFS的设计中,采用中心化的元数据管理节点NameNode,容易成为故障中的单点

HDFS备份

作为一个分布式系统(把大文件切分为多个小文件,存储到不同的机器上),如果没有备份的话,只要有其中的一台机器挂了,那就会导致「数据」是不可用状态的。备份步骤如下:

image.png

三大组件

image.png

介绍

再次强调一下,大数据的框架大部分其实都是主从架构,就是一主多从,等下要讲到的HDFS就是一个NameNode,多个DataNode,MapReduce就是一个JobTracker,多个TaskTracker,Yarn则是一个ResourceManager,多个NodeManager,而Spark就是一个Master和多个Slave

DataNode的介绍其实可以省略,姑且只需要知道它的作用是存放block块的即可。

1 NameNode的介绍

大数据框架都是分布式的,可能每个角色都运行在各个不同的服务器上面,需要进行通信的时候就要需要网络的支持,而在我们客户端需要读一个文件的信息时,必须知道我们这个文件被分成了多少个block,各个block又分别存储在哪个服务器上,这种用于描述文件的信息被称为文件的元数据信息(metaData),而metaData就是存储在NameNode的内存中的

2 metaData的介绍

metaData的大小:文件,block,目录占用大概150byte字节的元数据,所以为什么说HDFS适合存储大文件而不适合存储小文件,可想而知存储一个大文件就只有一份150byte的元数据,存储N多个小文件就会伴随存在N份150Byte字节的元数据文件,这就非常地不划算

元数据信息以命名空间镜像文件(以下称为fsimage)和编辑日志(以下称为edits log)的方式保存,两者的作用分别是

fsimage:元数据镜像文件,保存了文件系统目录树信息以及文件和块的对应关系
edits log:日志文件,保存了文件的更改记录
复制代码

为什么元数据需要存储在NameNode的内存中呢,答案很简单,存储在内存中意味着快,当然也会存在问题,就是如果NameNode宕机了,内存就无法读取了,此时为了防止这种情况出现,也为了加快NameNode从故障中恢复的速度,就设计了一个SecondaryNameNode的角色

日志缓存方面:客户端向 HDFS 写文件,会记录下来操作日志,而这时我们会预先准备好两块缓存区域,这个日志在写满了第一块缓存时,会开始录入磁盘,也就是edits log,NameNode的内存中,这种状态就是一个双缓存异步写的操作。这样可以保证客户端写的日志时刻都能被记录下来。

3 SecondaryNameNode的介绍

它的作用主要有以下几点
1.备份NameNode中的元数据信息
2.提高NameNode的重启速度
3.必要的时候可作为新的NameNode

HDFS机制————心跳机制

image.png

心跳机制的作用

心跳机制的作用

1.NameNode全权管理数据块的复制,它周期性从集群中的每个DataNode接收心跳信号和块状态报告(blockReport),接收到心跳信号意味着该DataNode节点工作正常,块状态报告包含了该DataNode上所有数据块的列表

2.DataNode启动时向NameNode注册,通过后周期性地向NameNode上报blockReport,每3秒向NameNode发送一次心跳,NameNode返回对该DataNode的指令,如将数据块复制到另一台机器,或删除某个数据块等···而当某一个DataNode超过10min还没向NameNode发送心跳,此时NameNode就会判定该DataNode不可用,此时客户端的读写操作就不会再传达到该DataNode上

3.hadoop集群刚开始启动时会进入安全模式(99.99%),就用到了心跳机制,其实就是在集群刚启动的时候,每一个DataNode都会向NameNode发送blockReport,NameNode会统计它们上报的总block数,除以一开始知道的总个数total,当 block/total < 99.99% 时,会触发安全模式,安全模式下客户端就没法向HDFS写数据,只能进行读数据。