脚本宝典收集整理的这篇文章主要介绍了透视Hbase数据模型|概念视图|物理视图,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
在 HBase 中,数据存储在有行和列的表中。这是与关系数据库 (RDBMS) 的术语重叠,但这不是一个有用的类比。相反,将 HBase 表视为多维映射可能会对理解更有所帮助。
:
(冒号)字符分隔。比如列contents:htML由列族contents
和限定符html
组成content
,一个列限定符可能是content:html
,另一个可能是content:pDF
。尽管列族在表创建时是固定的,但列限定符是可变的,并且在行之间可能会有很大差异。假如有一个名为weBTable的表,它包含两行(com.cnn.www和com.example.www)和三个列族,分别是contents、anchor和PEople。
在这个例子中,对于第一行(com.cnn.www), anchor包含两列(anchor:cssnsi.COM, anchor:my.look.ca), contents包含一列(contents:html)。这个例子包含行键为com.cnn.www的5个版本,以及行键为com.example.www的一个版本。
表webtable
此表中看起来为空的单元格不占用空间,或者实际上存在于 HBase 中。这就是 HBase“稀疏”的原因。表格视图不是查看 HBase 中数据的唯一可能方式,甚至不是最准确的方式。以下表示与多维map相同的信息。但注意这只是用于说明Hbase模型,可能并不完全准确。
表webtable的 Hbase Map视图
只是这里Hbase 使用的 Map 的主键更加复杂,是一个复合键由 row key行键 、column key列族(一个列族里可以在使用时任意添加拓展列,百万列的级别) ,qualifier列(也称限定符),type和 timestamp构成的KV键值对。
如上,其实我们发现每个键都指向一个包含3个键的映射:“contents”,“anchor”和“people”,这个我们称之为列族,列族的定义设置其实也就定义了多维map的框架是什么样,也就是第二层map的个数,我们又可以在第二层每个map里添加任意多个kv(;map)键值对,是为列和列值。表的列族是在创建表时指定的,以后很难或不可能修改。添加新的列族也可能很昂贵,因此最好预先指定您需要的所有列族。
Hbase/BigTable 中表示的最后一个维度是时间。所有数据都使用整数时间戳(自纪元以来的秒数)或您选择的另一个整数进行版本控制。客户端可以在插入数据时指定时间戳。如上,同一个rowkey com.cnn.www 的contents:html的值就有多个时间版本。
尽管在概念级别Hbase表可能被视为一组稀疏的行,但它们在物理上是按列族存储的。可以随时将新的列限定符 (column_family:column_qualifier) 添加到现有列族中。
如上图所示,很好地阐述了hbase数据存储结构,但尤其注意同一个rowkey多个时间戳,不同列族列缺失的情况,是如何存储的。如下:
概念视图中显示的空单元格根本没有存储,稀疏的。因此,对contents:html
时间戳列的值的请求t8
将不返回任何值,因为t8这个时间戳只有anchor列族有值,而content列族是缺失的。同样,对anchor:my.look.ca
时间戳值的请求t9
不会返回任何值。但是,如果未提供时间戳,则将返回特定列的最新值。给定多个版本,最新的也是第一个找到的,因为时间戳是按降序存储的。
注意,假如一个rowkey:com.cnn.www的请求
未指定时间戳,则对行中所有列的值的请求结果将是:contents:html
的timestamp 为t6
的值,anchor:cnnsi.com的则是
timestamp为t9
的值、anchor:my.look.ca的
timestamp为t8 的值
。即返回每个rowkey 列族的最新timestamp对应的cell值。
参考文档:带你学习不一样的Hbase|概述|核心原理_涤生手记-CSDN博客_如何学习hbase
Understanding HBase and BigTable - DZone
以上是脚本宝典为你收集整理的透视Hbase数据模型|概念视图|物理视图全部内容,希望文章能够帮你解决透视Hbase数据模型|概念视图|物理视图所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。