第二章:HBase的数据结构及逻辑存储结构

HBase

第二章:HBase的数据结构及逻辑存储结构



前言

本文主要讲解HBase存储数据的逻辑结构、HBase的数据模型及HBase在底层存储数据的物理存储结构


提示:以下是本篇文章正文内容,下面案例可供参考

一、HBase的逻辑结构

在这里插入图片描述

HBase的数据模型和数据库很类似,但底层的存储结构完全不同。
HBase的数据模型分为:store(相当于表)、列、Row Key(行)、region(列的集合)、列族

(1)store

store就相当于一个表,由多行和多列组成,store中包含memstore,主要用来写数据,每个store对应一个列族。
设置memstore的主要原因是:存储在HDFS上的数据需要按照row key 排序。而HDFS本身被设计为顺序读写,不允许修改。这样的话,HBase就不能够高效的写数据,因为要写入到HBase的数据不会被排序,这也就意味着要存入HDFS中的数据是无序的,这显然不利于存储数据后的数据检索。
所以memstore的作用是当写入数据到store时,数据先写到memstore中,只有当数据量达到一定阈值,之间的时间足够memstore将数据进行排序后再统一写到HDFS中。

(2)列

就是数据的一列,建表时,需要先指定列族才能创建列,每个列都由Column Famile(列族)和Column Qualifier(列限定符即列名)决定

(3)列族

包括多列,设置列族的目的是防止宽表(即有多列数据的表),即当数据列数很多是,设置列族可以大大提高检索效率。
如:要查找一个值,先找到这个值所对应列所在的列族(在HDFS中文件的存储是按store来分的,即文件的存储是按列族来分的)就可以精确的找到这个列族所在的文件进行检索。

(4)Row Key

代表一行数据,一列数据的唯一标识。Row Key的排序是逐位排的,即先比较第一位,若比出大小则不用对后面的进行比较,若第一位未比出大小,则要继续顺位比较下去,直到比较出来为止(注:若这一位为空则比0小)。
如:row_key1<row_key_11 ; row_key11<row_key2

(5)Region

region的作用是防止高表,即防止数据行数过多,可以将数据量大的表切分为多个region

二、使用步骤

1.物理存储结构图示:
在这里插入图片描述

storeFile即为HBase底层存储数据的结构
如图可以清晰地看到在逻辑结构表中的每一个值对应物理存储结构的一行,每个值都有一些其它属性,如:
Row Key代表列的唯一标识,用以标识该数据在这一行中;
Column Family代表这个值所在的列族;
Column Qualifier唯一标识这个值所在的列;
Time Stamp区分不同版本的数据,如当你修改这个数据后,原来的数据并不会直接被删除,而是因为新修改的数据时间戳大于之前数据的时间戳,所以在上层显示的就是新修改的数据;
Type用于鉴别数据的类型(仅有put和out两种)当数据被删除时Type值为out,此时并不会显示时间戳更小的那个值,因为此数据仍然存在,并没有被删除。
HBase底层使用这样的存储模式,可以大大提高数据的读取效率,并且提升了数据的容错率,因为以前的数据都没有被删除而是保存起来了,只不过我们看不到。


三、数据模型

(1)Name Space

命名空间,相当于MySQL的DataBase都是存放表的集合。HBase有两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,default 表是用户默认使用的命名空间。hbase命名空间存放的都是一些系统配置的表,所以尽量不要对这个命名空间进行操作。

(2)Region

类似于关系型数据库的表概念。不同的是,HBase 定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往 HBase 写入数据时,字段可以动态、按需指定即并不是指定了一个列就需要所有row key都要有这个列。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景。

(3)Row

HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成,数据是按照 RowKey的字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要。

(4)Column

HBase 中的每个列都由 Column Family(列族)和 Column Qualifier(列限定符)进行限定,例如 info:name,info:age(其中info为列族,name或age为列限定符)。建表时,只需指明列族,而列限定符无需预先定义。

(5)Time Stamp

用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入 HBase 的时间。

(6)Cell

由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell 中的数据是没有类型的,全部是字节码形式存贮

猜你喜欢

转载自blog.csdn.net/tyh1579152915/article/details/109071814