一、元数据简介

(1)作用:

1)存储真正数据的描述信息

2)存储真正数据的位置和操作信息

3)为用户提供真正的数据信息接口

(2)存储系统的元数据

1)传统数据库(mysql):数据库中表的信息,表的属性以及属性的类别等

2)分布式存储系统:数据的位置,数据的编辑记录,数据的存储目录等

3)Hive:数据仓库中表的信息,表的属性以及表中数据的位置信息等

二、分布式存储系统的元数据管理

1.中心节点管路

hive 元数据慢 hive的元数据存储管理_HDFS


中心节点管理元数据是通过单个节点去管理元数据,该节点会存储元数据,也会向真正的数据节点发送指令进行相关的操作。以普通的HDFS为代表。

优点:

1)元数据集中管理,会很方便的处理用户的数据请求任务

2)由于元数据都存储在一个节点上,当发生元数据更新的时候,只需要更新该节点上的元数据即可

3)单个节点易于管理和维护

缺点:

1)单个节点故障,整个存储系统不可用(备份节点)

2)性能扩容,尽管用户对于元数据的访问量相比真正的数据访问量,要小很多,但是理论上来说,仍然存在性能瓶颈。(提高该节点的性能)

2.分布式存节点管理

hive 元数据慢 hive的元数据存储管理_数据_02


分布式节点管理元数据是通过多个节点去管理元数据,不同的元数据节点会代表不同的命名空间(文件目录)。以HDFS Federation 为代表。

优点:

1)在保证了元数据管理的同时,实现了分布式节点存储元数据。

2)根本上解决了性能和容量扩容的问题,可以实现无限扩容。

缺点:

1)除了数据节点以外,又维护了一个分布式的元数据节点,维护成本很高

2)分布式元数据节点对于数据的一致性有极高的要求,如果元数据不一致,会导致数据存储出错

3)所有的元数据节点都要管理和维护数据节点,在数据节点发生问题时需要对数据节点做出一致性的决策。

4)增加了用户使用文件系统的难度

3.无元数据节点管理

hive 元数据慢 hive的元数据存储管理_HDFS_03


并无特别的元数据节点单独存储元数据,客户端使用算法进行计算相关的数据地址。以Ceph作为代表。

优点:

1)无单独的节点存储元数据,系统的扩容性相对来说较强;

2)寻址算法所需要的参数相对来说比较简单,易于计算,并且可以进行缓存

缺点:

1)对于一个现有集群进行更新的时候,客户端需要重新进行计算数据地址

2)数据地址相对来说较为固定,所以当某个区域的数据发生故障后,重新更新恢复会有较大的难度。

三、HDFS元数据管理

hive 元数据慢 hive的元数据存储管理_元数据_04


1.HDFS利用Namenode进行元数据管理,如果NameNode发生了故障,整个HDFS系统就不可用了。

2.HDFS的元数据包括HDFS的文件和目录结构,以及对应的属性。

3.NameNode中存放的元数据信息包括:文件名称、地址、权限、所属者、文件的命名空间、数据块ID、数据块信息、数据块地址、副本个数。

4.元数据的持久化存储

hive 元数据慢 hive的元数据存储管理_数据_05


fsimage:某个时间点的整个文件系统的状态,也就是某个时间点的NameNode的快照。

T1时刻,NameNode的快照为fsimage1

T2时刻作了一些文件系统的修该,修改为ID为1,那么可以说T2时刻,Namenode的快照为fsimage2.

fsimage2=fsimage1+ID为1的修改。

edit file:

存储了文件系统的修改日志,每一次对于文件系统的修改都有一个修改的ID

根据最近的fsimage和edit file的修改日志,我们可以重现NameNode当时的状态。

恢复步骤:

1)T0启动NameNode,使用了初始的fsimage0;

2)T1发生了一次修改,修改ID为1,如果我们此时使用checkpoint,那么新的fsimage1=fsimage0+ID

3)T2又发生了一次修改,修改ID为2,如果此时NameNode死机,我们并没有及时Checkpoint第二个修改,那么重启后,我们可以利用fsimage1+edit file(包含修改ID为2的记录)重现NameNode死机钱的状态。

元数据管理节点的可用性:

hive 元数据慢 hive的元数据存储管理_元数据_06


Secondary NameNode可以帮助NameNode进行恢复,但是如果NameNode出现问题,需要手动进行恢复。

hive 元数据慢 hive的元数据存储管理_HDFS_07


Standby NameNode和主NameNode的共享相关的编辑日志,并接收DataNode的报告,如果主NameNode发生了问题,系统会自动切换到Standby NameNode。