码迷,mamicode.com
首页 > 其他好文 > 详细

HDFS原理学习

时间:2020-04-13 00:21:47      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:学习   也有   隔离   增量   空间   高可用性   完成   ado   linu   

HDFS:Hadoop Distributes File System

技术图片

 

 HDFS 1.0

Namenode

   namenode又称名称节点,是负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即Fslmage和Editlog.你可以把它理解为大管家,它不负责存储具体的数据。

  • Fslmage用于维护文件系统树以及文件树所有的文件和文件夹的元数据
  • 操作日志文件Editlog中记录了所有针对文件的创建,删除,重命名等操作。
  • 注意这两个都是文件也会加载解析到内存中。

为啥会拆成两个呢?主要是因为fasimage这个文件会很大的,多了之后就不好操作了,就拆分成两个。把后续增量的修改放到Editlog中,一个Fslmage和一个Editlog进行合并会得到一个新的fslmage.

因为它是系统的大管家,如果这个玩意坏了,丢失了。就相当于你系统的引导区坏了。整个文件系统就崩溃了。所以这个重要的东西需要备份。这个时候就产生了一个叫SecondaryNameNode的节点用来做备份,它会定期的和nmaenode进行通信来完成整个的备份操作。具体的操作如下:

技术图片

 

 SecondaryNameNode的工作情况:

1.SecondaryNameNode会定期和namenode通信,请求其停止使用Editlog文件,暂时将新写的操作写道一个新的文件Edit.new上来。这个操作事瞬间完成,上层写日志的函数完全感觉不到差别;

2.SecondaryNameNode通过HTTP GET方式从Namenode上获取到Fsnage和FEditlog文件并下载到本地的相应目录下;

3.SecondaryNameNode将下载下来的fslmage载入到内存,然后一条一条的执行Editlog文件中的各项更新操作,使得内存中的fslmage保持最新,这个过程就是Editlog和Fslmage文件合并。

4.SecondaryNameNode执行完(3)操作之后,会通过post当时将新的Fslmage文件发送到NameNode节点上。

5.NameNode将从SecondaryNameNode接收到的新的Fslmage替换旧的Fslmage文件同时将edit.new替换Editlog文件,通过这个过程editlog就变小了

 

除了这个自带的备份操作,还需要进行人工的备份,把一份fsimage到多个地方进行备份,万一namenode的节点坏了呢。

 

DataNode

datanode数据节点,用来具体的存储文件,维护了blockld和datanode本地文件的映射。需要不断的与namenode节点通信,来告知其自己的信息,方便namenode来管控整个系统。

这里还提到一个块的概念,就想linux本地文件系统也有块的概念一样,这里也有块的概念,这里的块默认事128m,每个块都会默认存储三份

 

HDFS 2.0

有问题就得改,1.0出现很多问题

  • 单点故障问题
  • 不可以水平扩展
  • 系统整体性能受限于单个名称节点的吞吐量
  • 单个名称节点难以提供不同程序之间的隔离性
  • HDFS HA是热备份,提供高可用性,但是无法解决可扩展性,系统性能和隔离性

解决上面这些问题所使用的手段就是热备份

热备份(HDFS HA)

  • HDFS HA是为了解决的难点故障问题
  • HA集群设置两个名称节点,活跃 和 待命
  • 两个名称节点的状态同步,可以借助于一个共享存储系统来实现、
  • 一旦活跃名称节点出现故障,就可以立即切换到待命名称节点
  • Zookeeper确保一个名称节点在对外服务
  • 名称节点维护映射信息,数据集欸但哦同时向两个名称节点汇报信息
  • 技术图片

     Federation

  • 多个命名空间。为了处理一个namenode的局限性,高了几个namenode大家一起来管理。就像编程中的命名空间一样
  • 技术图片
  • 在HDFS Federation中,设计了多个相互独立的名称节点,使得HDFS的命名服务能够水平扩展,这些名称节点分别进行各自命名空间和块的管理,相互之间是联盟关系,不需要彼此协调,并且向后兼容
  • HDFS Federation中,所有名称节点会共享底层的数据节点存储资源,数据节点向所有名称节点汇报
  • 属于同一命名空间的 块构成一个“块池”

HDFS Federation设计可解决但名称节点存在的一下几个问题

1.hdfs集群扩展性。多个名称节点各自分管一部分目录,使得一个集群可以扩展到更多节点,不再像hdfs1.0中那样由于内存的限制制约文件存储数目

2.性能更高效。多个名称节点管理不同的数据,且同时对外提供服务,将为用户提供更高的读写吞吐率

3.良好的隔离性。用户可根据需要将不同业务数据交到不同名称节点管理,这样不同业务之间影响很小。

HDFS原理学习

标签:学习   也有   隔离   增量   空间   高可用性   完成   ado   linu   

原文地址:https://www.cnblogs.com/xufeng123/p/12688597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!