大数据存储与管理

大数据存储与管理

本节主要讲述大数据存储与管理技术的概念和原理,包括Hadoop分布式文件系统(HDFS)和分布式数据库(Hbase);


体系结构:

一、分布式文件系统HDFS

1.HDFS体系结构

2.HDFS存储原理

3.HDFS编程


二、分布式数据库Hbase

1.Hbase数据模型

2.Hbase实现原理

3.Hbase运行机制

4.Hbase编程

重点需要掌握分布式文件系统和分布式数据库的实现原理和应用方法。


分布式文件系统HDFS

大数据时代,该如何存储海量数据,为此,谷歌公司开发了分布式文件系统GFS,通过网络实现一个大文件能在多台机器上存储,满足了分布式存储需求。

HDFS Hadoop Distributed File System 是针对GFS的开源实现。

Hadoop有两大核心组件 HDFS和mapReduce;


本章先介绍HDFS

在平时常用的Win,Linux系统中 文件系统一般会把磁盘空间划分为512字节一组,成为磁盘块,他是文件系统读写操作的最小单位。 文件系统Block通常是磁盘块的整数倍,每次读写的数据量必须是磁盘块大小的整数倍。


在分布式文件系统中,也采用了这样块的概念。一个文件被分为很多个块来存储。HDFS中默认一个块大小是64M,但是如果一个文件没达到64M 它并不会占用整个数据块的存储空间。


分布式文件系统在物理结构上是由计算机集群中的多个节点组成的,这些节点被分为两类

1、NameNode和2、DataNode 

NameNode 负责文件和目录的创建、删除、重命名等,同时也管理着数据节点和文件块的映射关系,因此客户端需要访问名称节点才能找到请求的文件块所在的位置,进而到相应位置读取所需文件块。

DataNode负责数据的存储和读取。在存储时由名称节点分配存储位置,然后由客户端把数据直接写入到相应的数据节点。

在读取时候,客户端从名称节点获得数据节点和文件块的映射关系,然后可以到相应位置访问文件块。数据节点也要根据名称节点的命令创建,删除数据和冗余复制。

计算机集群中的节点可能发生故障,因此为了保证数据的完整性,分布式文件系统通常采用,多副本存储。文件块会被复制多个副本,存在不同的节点,单个节点故障时候,就可以快速调用副本重启单个节点上的计算过程,不用重启整个计算过程。

HDFS的相关概念

块:

在传统文件系统中,为了提高磁盘读写效率,一般以数据块为单位,而不是以字节为单位。

比如:在机械硬盘中包含了磁头和转动部件,在读取数据时候 有一个寻道的过程,通过转动盘片和移动磁头的位置,来找到数据在机械师硬盘中存储的位置,然后才能进行读写。在I/O开销中,机械师硬盘的寻址时间是最耗时的部分,一旦找到第一条记录,剩下的顺序读取效率是非常高的。因此,以块为单位读写数据,可以把磁盘寻道时间分摊到大量数据中。

HDFS也同样采用了块的概念,默认的一个块大小为64MB。在HDFS中的文件会被拆分成多个块,每个块作为独立的单元进行存储,默认的一个块大小是64MB。在HDFS中的文件会被拆分成为多个块,每个块作为独立的单元进行存储。我们所熟悉的普通文件系统的块一般只有几千个字节,可以看出HDFS设计中 ,他的块大小远远大于普通的文件系统,HDFS这么做,是为了最小化寻址开销,HDFS中的寻址开销,不仅包括磁盘寻址开销,还包括数据块定位的开销。


名称节点和数据节点:

在HDFS中,NameNode 负责管理分布式文件系统的命名空间。保存了两个核心的数据结构 FsImage 和EditLog.

FsImage用于维护文件系统树和文件树中所有的文件和文件夹的元数据。

(包含了:

1.文件复制等级

2.修改和访问时间

3.访问权限

4.块大小以及组成文件的块

)

元数据存在内存中,元数据中包含了以下内容:

1.文件是什么

2.该文件被分为多少块

3.每个块和文件怎么映射

4.每个块被存在哪个服务器上


这些块放在哪里是实时存在内存中,不由FsImage保存,

由DataNode汇报给NameNode;


操作日志Editlog中记录了所有针对文件的操作。


第二名称节点:

在名称节点运行期间,HDFS会不断发生更新操作,这些更新操作都是直接被写入到EditLog文件,因此 EditLog文件也会逐渐变大。在名称节点运行期间,不断变大的EditLog文件通常对于文件系统性能不会产生显著影响,但是当名称节点重启时,需要将FsImage加载到内存中,然后逐条执行EditLog中的记录,使得FsImage保持更新。


(1)EditLog和FsImage 的合并操作,每隔一段时间(默认一小时)或EditLog中存满100万条数据。第二名称节点就会和NameNode通信,请求其停止使用EditLog文件。暂时把新的操作写在EditLog.new中,然后第二名称节点把名称节点中的Edit和FsImage文件拉回本地。 再加载到内存中,对二者执行合并操作。 即在内存中逐条执行EditLog中的操作,使FsImage保持最新,合并结束后,第二名称节点,把合并后得到的最新的FsImage文件发送到NameNode.NN收到后,会用最新的FsImage文件去替换旧的FsImage文件,同时用EditLog.new文件去替换Edit文件。


(2)名称节点作为“检查点“ ,周期性的备份名称节点中的元数据信息。当NN故障时候,可以用2NN中的记录元数据信息进行系统恢复。但是,在第二名称节点上合并操作,得到的新的FsImage文件是合并操作发生时HDFS记录元数据信息,但是会丢失掉,合并期间部分信息。

你可能感兴趣的:(大数据存储与管理)