HBase 的那一点知识

Posted 架构师Java之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase 的那一点知识相关的知识,希望对你有一定的参考价值。

1HBase的存储结构是什么?该结构有什么优势?

HBase是列式存储数据库,列式存储数据库的出现主要基于这样一种假设:对于特定的查询,而不是所有的值都是必须的(即:可以只查询特定的列)。

另外,列式存储结构由于是基于列存储的,而列的数据类型天生是相似的,更加有利于压缩。

2、什么是HBase的短网址,举个栗子?

HBase短网址,即Hush,Hush允许用户将长网址映射为短网址(short URL)。现在国内有很多短网址提供商,比如新浪短网址,我输入:

http://www.chenjt.info/wp-login.php?redirect_to=http%3A%2F%2Fwww.chenjt.info%2Fwp-admin%2Fthemes.php&reauth=1

这么长的一个URL,然后通过短网址映射为:http://t.cn/RJPIcs2

其实这个原理很简单,就是让第三方做一个简单的映射关系,从而将长网址转为短网址。

3HBase中的列族与列的特点,它们的个数有什么限制吗?列值有数据类型和长度限制吗?

一行有若干列,若干列又构成一个列族(column family,这不仅有助于构建数据的语义边界,还有助于设置某些特性(比如压缩),或者指示它们存储在内存中。

一个列族的所有列存储在同一底层的存储文件里,这个存储文件叫做HFile

列族的数量是有限制的:原因是,当前的实现中有少许的缺陷,使得列族的数量只限于几十或者更少。(注意:不要为一张表设置过多的列族,特别是当数据量大的列族和数据量小的列族混用)。

与列族的数量有限制相反,列的数量没有限制:一个列族里可以有数百万个列,列值也没有类型和长度的限定。

4、在HBase中如果某个列的之前存入了值,后面有些列没有存储值,数据会存储NULL值吗?还是没有占存储空间呢?

在某些固定模式的数据库中,如果没有值的地方必须存储NULL值,但是在HBase的存储架构中,可以干脆省略整个列,换句话说,空值是没有任何消耗的:它们不占用任何存储空间。

举个栗子:

Row Key

TimeStamp

Column “data:”

Column  “meta:”

“minetype”            “size”

Column “counters:”

“updates”

“row1”

t3

“{“name”:”lars”,”address”:…}”


2323

“1”

t4

“{“name”:”lars”}”



“2”

t5


“application/json”



t6

“{“name”:”lars,”address”:…}”



“3”

上面的这些值由于插入的次数不同,并且存储在多个版本中,但是仍然能够看作是所有列以及这些列的最新版本(即每一列的最大tn)的组合。

5HBase读取数据的模式?

(Table,RowKey, Family, Column, Timestamp) -> Value

通常,我们没有去指定Timestamp这时候,默认是用最新的时间戳(如果版本号大于1,即存储了多个时间戳的数据)。

6、关于HBase中的HFileregion

HFile:一个列族的所有列存储在同一个底层的存储文件里,这个存储文件叫做HFile(默认是64KB,涉及到HBase架构)。

Region:HBase中的region等同于数据库分区中的范围划分(range partion),它们可以被分配到若干台物理服务器上以均摊负载,因此提供了较强的扩展性。一个表初始的时候只有一个region,当用户开始向表中插入数据(这里应该是针对一个列族的存储单元,当已使用的存储空间大小超过了大小限制,region将发生拆分),系统会检查这个region的大小,如果超过最大值(默认是256M:如果表的数据量非常大,可以将该值提高),会将region将发生拆分操作。

8HBase中数据更新的流程

HBase中的预写日志(write-ahead log, WAL,即每次更新数据时,都会将数据记录在提交日志(commit log)中,然后才将这些数据写入内存中的memstore(默认大小是64M)中,一旦内存保存的写入数据的累计大小超过了一个给定的最大值,系统就会将这些数据移出内存作为HFile文件刷写到磁盘中。数据移出内存之后,系统会丢失对应的提交日志,只保留未持久化到磁盘中的提交日志。

9HBase中数据的读取是从哪里读取的?

HBase中数据的读取是两部分数据合并的结果:(1memstore中还没有写入磁盘的数据;(2)磁盘上的存储文件。

10HBasememstore中数据刷写磁盘的方式

随着memstore中的数据不断的刷写到磁盘中,会产生越来越多的HFile文件,在HBase中,会将多个文件合并成一个较大的文件,而合并有两种类型:

minor合并(minor compaction)和major合并(major compaction)

minor合并:将多个小文件重写为数量较大的大文件,减少存储文件的数量。major合并:将一个region中一个列族的若干个HFile重写为一个新HFile,该合并能够扫描所有的键/值对,顺序重写全部数据,重写数据的过程中略过了删除标记的数据(如果没有合并前,进行删除数据,只是将该数据标记为删除,在客户端读取时,会略过,但是实际上未删除)。上述的major合并,对于那些超过版本号限制的数据以及生存时间到期的数据,在重写数据时就不再写入磁盘中。

11、什么是大数据

数十亿行×数百万列×数千个版本=TB级或PB级的存储

12、集群中时间同步的方法

方法:在集群中运行NTP或同等功能的应用来同步集群的功能。

13Linux文件句柄是什么?在HBase中需要注意什么?

命令:ulimit -n 可以查看一个进程中允许打开的最大文件句柄数量(系统默认值是1024

 

看完本文有收获?请转发分享给更多人

关注 架构师Java之路,提升Java 技能



以上是关于HBase 的那一点知识的主要内容,如果未能解决你的问题,请参考以下文章

一文让您全面了解清楚HBase数据库的所有知识点,值得收藏!

JavaScript基础知识(数组的方法)

C++课程学期总结

HBase 知识手册

HBase数据迁移实践操作篇

Day26:分布式NoSQL列存储数据库HBASE