参考 

参考 

Chapter 五. 数据模型

Architecture

Architecture

Table of Contents

65. Overview

65. Overview

伍.一. 概念视图
5.贰. 概略视图
5.3. 表
5.4. 行
5.5. 列族
5.6. Cells
5.7. 版本号

65.1. NoSQL?

HBase是1种”NoSQL”数据库。“NoSQL”一般指的长短关系型数据库,我们知道,关系型数据库帮助SQL,也正是说HBase不帮忙SQL。非关系型数据库有很多样,BerkeleyDB是壹种本地非关系型数据库,不过,HBase是遍布式数据库。从本领上来讲,HBase更像是“Data
Store”,而不是“Data
Base”,因为它缺少大多关系型数据库的表征,举例:列类型、帮助索引、触发器、查询语言等等。(PS:意思是,从才能的角度讲,HBase更像1个多少存款和储蓄,而不像数据库)

HBase集群扩大通过扩充RegionServer来落成。固然三个集群从十扩展到十几个RegionServer,那么,不仅仅是积攒容积扩充1倍,连管理本领也会扩大壹倍。对于关系型数据库来讲,也足以用scale做到那样,可是急需提出的是,那需求尤其的硬件和存款和储蓄设备。HBase天性如下:

  • 强一致性读写:HBase不是多少个“最终一致性”的多寡存储。那使得它更适合高速度的联谊任务。
  • 电动分区:HBase的表通过region被布满在集群中,而region是机动拆分相提并论新分布数据行的。
  • 自动RegionServer容灾
  • Hadoop/HDFS集成:HBase协助HDFS作为它的遍布式文件系统
  • MapReduce:HBase扶助通过MapReduce基于HBase作为数据源的大度的并行管理
  • Java Client API:HBase协理通过Java
    API编制程序的格局来访问
  • Thrift/REST
    API:HBase也帮助Thrift和REST那样的非Java的客户端
  • Block Cache and Bloom Filters
  • Operational
    Management:HBase提供web界面

65.1. NoSQL?

HBase是壹种”NoSQL”数据库。“NoSQL”一般指的是非关系型数据库,大家精通,关系型数据库协助SQL,约等于说HBase不协理SQL。非关系型数据库有很多种,Beck雷DB是一种当地非关系型数据库,然则,HBase是遍及式数据库。从手艺上来讲,HBase更像是“Data
Store”,而不是“Data
Base”,因为它贫乏好些个关系型数据库的特点,比方:列类型、补助索引、触发器、查询语言等等。(PS:意思是,从技巧的角度讲,HBase更像2个数目存款和储蓄,而不像数据库)

HBase集群扩充通过扩张RegionServer来完成。若是3个集群从拾增加到二十个RegionServer,那么,不仅仅是积攒体积扩展一倍,连管理技能也会扩展壹倍。对于关系型数据库来讲,也足以用scale做到那样,不过需求提出的是,这亟需特其他硬件和存款和储蓄设备。HBase本性如下:

  • 强1致性读写:HBase不是3个“最后1致性”的数据存款和储蓄。那使得它更适合高速度的汇集职责。
  • 自行分区:HBase的表通过region被遍布在集群中,而region是半自动拆分并再一次遍布数据行的。
  • 自动RegionServer容灾
  • Hadoop/HDFS集成:HBase协理HDFS作为它的分布式文件系统
  • MapReduce:HBase辅助通过MapReduce基于HBase作为数据源的大方的并行处理
  • Java Client API:HBase支持通过Java
    API编制程序的秘技来拜访
  • Thrift/REST
    API:HBase也扶助Thrift和REST那样的非Java的客户端
  • Block Cache and Bloom Filters
  • Operational
    Management:HBase提供web界面
5.7.1. HBase的操作(包括版本号操作)
5.7.2. 现有的限制

65.2. When Should I Use HBase?

并不是有所的主题素材都适合用HBase

首先、确定保证您有丰富的多寡。要是您有许好多多的数据行,那么HBase是一个没有错的选项。借使您唯有数千要么百万的数量,那么使用古板的关系型数据库可能更加好,因为实在你的这几个多少可能只必要2个要么八个节点就能管理得完,那样的话集群中的其余的节点就处于空闲状态。

其次、确定保障您不要求用到关系型数据库的风味(比方:固定类型的列、协理索引、事务、查询语言等等)。基于关系型数据库塑造的使用无法通过轻便的改变JDBC驱动来传输到HBase中。从宝马X3DBMS到HBase是一心相反的两套设计。

其3、确定保证您有丰富的硬件。因为当DataNode数量稍低于5的时候HDFS将不可能通常干活了。

65.2. When Should I Use HBase?

并不是有所的难点都合乎用HBase

首先、确认保证您有丰硕的数码。要是您有数不胜数的数码行,那么HBase是五个不利的抉择。借使您只有数千照旧百万的多少,那么使用古板的关系型数据库或然更加好,因为实际你的那么些数量或然只需求多个依然七个节点就能管理得完,那样的话集群中的别的的节点就高居空闲状态。

其次、确认保证您不需求用到关系型数据库的特点(比方:固定类型的列、扶助索引、事务、查询语言等等)。基于关系型数据库创设的使用不可能通过轻巧的改造JDBC驱动来传输到HBase中。从CR-VDBMS到HBase是完全相反的两套设计。

其三、确定保障您有足够的硬件。因为当DataNode数量低于5的时候HDFS将不可能健康专业了。

总结来说,应用程序是以表的不二等秘书籍在HBase存款和储蓄数据的。表是由行和列构成的,全部的列是从属于某三个列族的。

65.3. What Is The Difference Between HBase and Hadoop/HDFS?

HDFS是多少个布满式的文件系统,适合积累大文件,但它不能够提供高效的本性化的在文书中搜求。HBase是营造于HDFS基础之上的,并且它扶助对大表的中的记录进行快速寻找和翻新。HBase内部将数据存放在HDFS中被索引的“StoreFiles”上以供高速找出。

65.3. What Is The Difference Between HBase and Hadoop/HDFS?

HDFS是一个布满式的文件系统,适合储存大文件,但它不能提供飞速的个性化的在文件中寻觅。HBase是创设于HDFS基础之上的,并且它帮忙对大表的中的记录实行高效寻找和更新。HBase内部将数据存放在HDFS中被索引的“StoreFiles”上以供高速寻找。

行和列的交叉点称之为cell,cell是本子号化的。

69. Master

HMaster是Master Server的一个兑现。Master
Server肩负监视集群中装有的RegionServer实例,并且它也是有所元数据变动的四个对外接口。在布满式集群中,标准的Master运营在NameNode那台机器上。

69. Master

HMaster是Master Server的二个兑现。Master
Server担负监视集群中具备的RegionServer实例,并且它也是具有元数据变动的三个对外接口。在布满式集群中,标准的Master运维在NameNode这台机器上。

cell的内容是不可切割的字节数组。

69.3. Interface

HMasterInterface接口是操作元数据的主要接口,提供以下操作:

  • Table (createTable, modifyTable,
    removeTable, enable, disable)
  • ColumnFamily (addColumn, modifyColumn,
    removeColumn)
  • Region (move, assign, unassign)

69.3. Interface

HMasterInterface接口是操作元数据的第三接口,提供以下操作:

  • Table (createTable, modifyTable,
    removeTable, enable, disable)
  • ColumnFamily (addColumn, modifyColumn,
    removeColumn)
  • Region (move, assign, unassign)

表的行键也是一段字节数组,所以不论什么东西都能够保留进去,不论是字符串或然数字。HBase的表是按key排序的,排序方式之针对字节的。全体的表都必必要有主键-key.
五.1. 定义视图

70. RegionServer

HRegionServer是RegionServer的兑现,它承受服务并管理regions。在布满式集群中,二个RegionServer日常运营在1个DataNode上。

70. RegionServer

HRegionServer是RegionServer的贯彻,它担任服务并保管regions。在布满式集群中,3个RegionServer常常运维在3个DataNode上。

以下是依据BigTable 诗歌稍加改换的样例。

70.1. Interface

HRegionRegionInterface既涵盖数据的操作也蕴涵region维护的操作

  • Data (get, put, delete, next,
    etc.)
  • Region (splitRegion, compactRegion,
    etc.)

70.1. Interface

HRegionRegionInterface既蕴含数据的操作也富含region维护的操作

  • Data (get, put, delete, next,
    etc.)
  • Region (splitRegion, compactRegion,
    etc.)

有二个名字为webtable的表,包含五个列族:contents和anchor.在这些样例里面,anchor有三个列
(anchor:cssnsi.com,
anchor:my.look.ca),contents仅有壹列(contents:html)
列名

70.5. RegionServer Splitting Implementation

region
server管理写请求,它们被储存在内部存款和储蓄器中1个叫memstore的地点。一旦memstore文件满了,内容将被写到磁盘上作为store
file。那些事件称为memstore flush。随着store
file的持续积攒,RegionServer将联合它们成大文件,以调减store
file的数额。在每回刷新可能合并之后,region中多少的多寡会爆发转移。RegionServer依据切分战术来查阅是还是不是region太大了或然应当被切分。

逻辑上,region切分的操作很轻便。找八个确切的职分,将region中的数据切分成三个新的region。不过,那几个管理的进度并不轻易。当切分产生的时候,数据并不是及时被重写到那些心创设的丫头region上。

 

 

70.5. RegionServer Splitting Implementation

region
server处理写请求,它们被积累在内存中一个叫memstore的地方。1旦memstore文件满了,内容将被写到磁盘上作为store
file。那一个事件称为memstore flush。随着store
file的不停累积,RegionServer将联合它们成大文件,以调减store
file的数据。在每一次刷新或许合并之后,region中多少的数目会发生转移。RegionServer依据切分计策来查阅是还是不是region太大了可能应当被切分。

逻辑上,region切分的操作很不难。找贰个适用的职位,将region中的数据切分成几个新的region。不过,那些管理的进程并不轻便。当切分发生的时候,数据并不是及时被重写到这些心成立的姑娘region上。

 

 

四个列名是由它的列族前缀和修饰符(qualifier)连接而成。比方列contents:html是列族
contents加冒号(:)加 修饰符 html组成的。

71. Regions

图片 1

71. Regions

图片 1

Table 5.1. 表 webtable
Row Key Time Stamp ColumnFamily contents ColumnFamily anchor
“com.cnn.www” t9 anchor:cnnsi.com = “CNN”
“com.cnn.www” t8 anchor:my.look.ca = “CNN.com”
“com.cnn.www” t6 contents:html = “…”
“com.cnn.www” t5 contents:html = “…”
“com.cnn.www” t3 contents:html = “…”

73. HDFS

图片 3

73. HDFS

图片 3

5.2. 大意视图

Data Model

在HBase中,数据被贮存在表中,有行和列。这个术语和关系型数据有部分交汇,当然这不是2个很好的类比,不过它对我们思想HBase的表示二个多维的map很有帮助。

Table

  由多行组成

Row

  HBase中的行由四个row
key和三个或多个列组成。Rows在蕴藏的时候遵照row
key的字典序存款和储蓄。正因为如此,row
key的设计就展现万分首要。基于那一点,相关连的行相互之间存在周围。平日,row
key是3个网址的域名。倘若您的row
key是域名,你应该以倒置的诀要存款和储蓄它们(比方:org.apache.www,org.apache.mail,org.apache.jira等等)。那样的话,全体的apache域名在表中是近乎的岗位,而不是被子域名的首先片段分离。

Column

  HBase中的列由1个列簇和1个列修饰符组成,它们中间用冒号分隔(:)

Column Family

  列簇由壹多元的列和它们的值组成,那是基于质量思量的。每三个列簇都有1雨后冬笋的贮存属性,举个例子:是或不是它们的值应该被缓存到内部存款和储蓄器中,它们的数额如何被核减,它们的row
key如何被编码,等等。表中的每一行都有同等的列簇,就算三个加以的行在给定的列簇上一直不存款和储蓄任何数据。

Column Qualifier

  叁个列修饰符被增加到列簇中为了给内定的数据片段提供索引。借使,给定的列簇是content,那么,贰个列修饰符恐怕是content:html,其它的还有十分大也许是content:pdf。即便,列簇在表成立的时候就稳固了,不过列修饰符是不分明的,而且不一致的行只怕有不通的列修饰符。

Cell

图片 5

Timestamp

  一个timestamp被写在各种value的旁边,它是二个value的本子修饰符。私下认可的,timestamp代表数量被RegionServer写入的小时,你也足以在写多少的时候内定3个不等的timestamp值

Data Model

在HBase中,数据被积攒在表中,有行和列。这一个术语和关系型数据有局地重叠,当然这不是一个很好的类比,但是它对大家思念HBase的代表贰个多维的map很有赞助。

Table

  由多行组成

Row

  HBase中的行由3个row
key和2个或四个列组成。Rows在储存的时候根据row
key的字典序存款和储蓄。正因为那样,row
key的规划就显得特别重大。基于那或多或少,相关连的行互相之间存在左近。日常,row
key是二个网址的域名。借使你的row
key是域名,你应当以倒置的方法存款和储蓄它们(比如:org.apache.www,org.apache.mail,org.apache.jira等等)。那样的话,全体的apache域名在表中是近似的职务,而不是被子域名的率先部分分离。

Column

  HBase中的列由一个列簇和1个列修饰符组成,它们之间用冒号分隔(:)

Column Family

  列簇由壹雨后玉兰片的列和它们的值组成,那是依照质量思量的。每一个列簇都有一名目多数的蕴藏属性,比如:是还是不是它们的值应该被缓存到内部存款和储蓄器中,它们的数目如何被减去,它们的row
key怎么样被编码,等等。表中的每一行都有同样的列簇,纵然3个加以的行在给定的列簇上并未有存款和储蓄任何数据。

Column Qualifier

  一个列修饰符被增添到列簇中为了给钦命的多少片段提供索引。若是,给定的列簇是content,那么,3个列修饰符或者是content:html,其余的还有十分的大可能率是content:pdf。纵然,列簇在表创设的时候就定位了,不过列修饰符是不明显的,而且不一样的行也许有不通的列修饰符。

Cell

图片 5

Timestamp

  八个timestamp被写在各样value的外缘,它是3个value的本子修饰符。暗许的,timestamp代表数量被RegionServer写入的年华,你也得以在写多少的时候钦命三个比不上的timestamp值

虽说在概念视图里。表能够被用作是三个疏散的行的聚合。但在大要上,它的是分别列族
存款和储蓄的。新的columns能够不通过注解直接助长3个列族.

20. Conceptual View

图片 7

在这么些例子中,有贰个表叫“webtable”,它含有两行数据(com.cnn.www和com.example.www)和五个列簇(contents,anchor,people)。对于第3行(com.cnn.www),anchor蕴含两列(anchor:cssnsi.com,anchor:my.look.ca),contents包括1列(contents:html)。row
key为“com.cnn.www”的行有多个版本,而row
key为“com.example.www”的行有三个本子。contents:html列包罗全体网址的HTML。

在这一个表格中的空的单元格并不占用空间

下图是1个模仿,目的在于表明表达地点我们所说的,便于大家明白:

图片 8

20. Conceptual View

图片 7

在那几个例子中,有二个表叫“webtable”,它包括两行数据(com.cnn.www和com.example.www)和八个列簇(contents,anchor,people)。对于第一行(com.cnn.www),anchor包蕴两列(anchor:cssnsi.com,anchor:my.look.ca),contents包罗一列(contents:html)。row
key为“com.cnn.www”的行有陆个本子,而row
key为“com.example.www”的行有一个版本。contents:html列包涵全体网址的HTML。

在这一个表格中的空的单元格并不占用空间

下图是2个效仿,意在说明表明方面我们所说的,便于大家精通:

图片 8

Table 5.2. ColumnFamily anchor
Row Key Time Stamp Column Family anchor
“com.cnn.www” t9 anchor:cnnsi.com = “CNN”
“com.cnn.www” t8 anchor:my.look.ca = “CNN.com”

21. Physical View

尽管,在概念上,表看起来像是1行1行的,但概况上,它们是依据列簇被储存的。2个新的列修饰符能够在率性时刻被增多到列簇中。

图片 11

在前面包车型地铁定义视图中的空的单元格是不被贮存的。由此,请求contents:html列并且timestamp为t8将再次回到没有值。但是,即使不钦命timestamp,那么某些列的大许多分值都会被重回。借使钦赐多少个版本,惟有找到的第3个会被再次回到,因为数量是依据timestamp降序存款和储蓄的。

21. Physical View

纵然,在概念上,表看起来像是①行一行的,但轮廓上,它们是遵照列簇被储存的。八个新的列修饰符能够在率性时刻被增加到列簇中。

图片 11

在眼下的定义视图中的空的单元格是不被贮存的。由此,请求contents:html列并且timestamp为t八将赶回未有值。然则,假设不钦点timestamp,那么有个别列的大多数值都会被再次回到。倘诺钦定多个版本,唯有找到的第贰个会被重返,因为数量是依据timestamp降序存款和储蓄的。

Table 5.3. ColumnFamily contents
Row Key Time Stamp ColumnFamily “contents:”
“com.cnn.www” t6 contents:html = “…”
“com.cnn.www” t5 contents:html = “…”
“com.cnn.www” t3 contents:html = “…”

22. Namespace

2个命名空间是表的一个逻辑分组

22. Namespace

3个命名空间是表的叁个逻辑分组

值得注意的是在上边的概念视图中空白cell在情理上是不存款和储蓄的,由于根本完全没须求存款和储蓄。

23. Table

23. Table

为此若一个伸手为要获取t八时间的contents:html。他的结果就是空。类似的。若请求为获得t玖时间的anchor:my.look.ca。结果也是空。然则。假如不指明时间,将会回去最新时刻的行,每贰个新式的都会回到。比如,若是请求为获取行键为”com.cnn.www”。未有指明时间戳的话,活动的结果是t6下的contents:html,t9下的anchor:cnnsi.com和t八下anchor:my.look.ca。

24. Row

行依照row key字典升序存款和储蓄

24. Row

行依照row key字典升序存款和储蓄

For more information about the internals of how HBase stores data, see
Section 9.7, “Regions”.
5.3. 表

25. Column Family

Columns in Apache HBase
are grouped into column
families.

列簇中装有的列成员都有雷同的前缀。比如,列courses:history和courses:math都以courses这些列簇的成员。用冒号分隔列簇和列修饰符。列簇前缀必须由得以打字与印刷输出的字符组成。列修饰符能够由大肆字节组成。列簇必须在表被定义的时候就声称好,由此列就不需求在表创立的时候定义了,并且能够随时新扩大。

概略上,全体的列簇成员被积累在联合。

25. Column Family

Columns in Apache HBase
are grouped into column
families.

列簇中颇具的列成员都有一样的前缀。举例,列courses:history和courses:math都是courses这几个列簇的成员。用冒号分隔列簇和列修饰符。列簇前缀必须由得以打字与印刷输出的字符组成。列修饰符能够由任性字节组成。列簇必须在表被定义的时候就声称好,因而列就不必要在表创设的时候定义了,并且可以随时新扩张。

大要上,全数的列簇成员被积累在协同。

表是在schema注解的时候定义的。
5.4. 行

26. Cells

A {row, column, version} tuple exactly specifies a cell in
HBase.

26. Cells

A {row, column, version} tuple exactly specifies a cell in
HBase.

行键是不行切割的字节数组。

27. Data Model Operations

数据模型有6个至关心保护要操作,分别是Get、Put、Scan和Delete。这几个操作是利用在表上的。

27. Data Model Operations

数据模型有陆个重大操作,分别是Get、Put、Scan和Delete。那么些操作是接纳在表上的。

行是按字典排序由低到高存款和储蓄在表中的。1个空的数组是用来标记表空间的开局也许结尾。
5.5. 列族

27.1. Get

归来钦定行的习性

27.1. Get

回来钦赐行的属性

在HBase是列族一些列的集纳。

27.2. Put

增多新的行到表中,或许更新已经存在的行

27.2. Put

加多新的行到表中,也许更新已经存在的行

2个列族全体列成员是具备同样的前缀。举例,列courses:history 和
courses:math都以 列族
courses的成员.冒号(:)是列族的分隔符。用来差别前缀和列名。

27.3. Scans

举目肆望特定属性的多行

27.3. Scans

环视特定属性的多行

column
前缀必须是可打字与印刷的字符,剩下的一部分(称为qualify),能够又放四字节数组组成。列族必须在表建立的时候证明。column就不须求了。随时能够新建。

27.4. Delete

从表中删除壹行

27.4. Delete

从表中删除一行

在情理上,1个的列族成员在文件系统上都以积攒在一同。

28. Versions

在HBase中,{row,column,version}能够明确叁个单元格。当行和列被压缩成字节的时候,版本用long类型钦定。在HBase中,版本以降序存款和储蓄,所以,近来的值总是第二被开采。

28. Versions

在HBase中,{row,column,version}能够规定一个单元格。当行和列被压缩成字节的时候,版本用long类型钦定。在HBase中,版本以降序存款和储蓄,所以,近来的值总是第三被发觉。

由于存款和储蓄优化都以本着列族品级的,那就象征。一个colimn
family的万事成员的是用同一的主意訪问的。

29. Sort Order

对于有所的数据模型操作,HBase以数据被累积时的逐条重临。首先按行排序,其次按列簇,再其次按列修饰符,最终是timestamp。(PS:前是七个是字典升序,最终三个timestamp是降序)

29. Sort Order

对于具有的数据模型操作,HBase以数量被积攒时的逐条重回。首先按行排序,其次按列簇,再其次按列修饰符,最终是timestamp。(PS:前是八个是字典升序,最后2个timestamp是降序)

5.6. Cells

30. Column Metadata

不存款和储蓄列的元数据,因而,HBase能够支撑每壹行有过多列,行与行以内可以有各样差异的列。

30. Column Metadata

不存款和储蓄列的元数据,由此,HBase能够援助每1行有繁多列,行与行之间能够有各种差异的列。

A {row, column, version} 元组正是三个HBase中的贰个cell。Cell的内容是不可切割的字节数组。
5.⑦. 数据模型操作

31. Joins

HBase不间接join操作,至少不援助关系型数据库那种join。在HBase中,读取数据通过Get和Scan。

31. Joins

HBase不直接join操作,至少不援助关系型数据库那种join。在HBase中,读取数据通过Get和Scan。

八个主导的数据模型操作是 Get, Put, Scan, 和 Delete. 通过 HTable
实例进行操作.
5.7.1. Get

33. Schema Creation

图片 13

33. Schema Creation

图片 13

Get 重回特定行的习性。

34. Table Schema Rules Of Thumb

  • regions的轻重在拾~50GB之间
  • cells的高低不超越十MB
  • 卓绝的,每种表的列簇在一~一个里面。HBase的表不应有被设计成模仿关系型数据库的表
  • 一个有1~1个列簇的表所具有的regions大概在50~100个左右
  • 维持你的列簇名字尽恐怕的短

34. Table Schema Rules Of Thumb

  • regions的深浅在10~50GB之间
  • cells的高低不超越10MB
  • 优异的,每个表的列簇在一~二个里头。HBase的表不应有被设计成模仿关系型数据库的表
  • 一个有1~1个列簇的表所具备的regions大致在50~100个左右
  • 维持你的列簇名字尽只怕的短

Gets 通过 HTable.get 运行。
5.7.2. Put

50. HBase as a MapReduce Job Data Source and Data Sink

HBase能够当作MapReduce作业的数据源。对于读写HBase的MapReduce作业,提议选用TableMapper和TableReducer。

假定您运维HBase作为数据源的MapReduce作业,你必要在布置文件中钦赐表和列名。

当您从HBase读取数据的时候,TableInputFormat请求regions的列表并且作为1个map。

 

50. HBase as a MapReduce Job Data Source and Data Sink

HBase能够看做MapReduce作业的数据源。对于读写HBase的MapReduce作业,提出选择TableMapper和TableReducer。

假诺您运转HBase作为数据源的MapReduce作业,你供给在安顿文件中内定表和列名。

当您从HBase读取数据的时候,TableInputFormat请求regions的列表并且作为二个map。

 

Put 要么向表增加新行 (假如key是新的) 或更新行 (要是key已经存在)。 Puts
通过 HTable.put (writeBuffer) 或 HTable.batch (non-writeBuffer)运行。
5.7.3. Scans

54. HBase MapReduce Examples

 

54. HBase MapReduce Examples

 

Scan 同意多行一定属性迭代。

以下是多个在 HTable 表实例上的示范样例。 假诺表有几行键值为 “row一”,
“row二”, “row3”, 另一些行有键值 “abc一”, “abc贰”, 和 “abc3”.
以下的示范样例展现startRow 和 stopRow 能够使用到三个Scan
实例。以回到”row”打头的行。

HTable htable = … // instantiate HTable

Scan scan = new Scan();
scan.addColumn(Bytes.toBytes(“cf”),Bytes.toBytes(“attr”));
scan.setStartRow( Bytes.toBytes(“row”)); // start key is inclusive
scan.setStopRow( Bytes.toBytes(“row” + (char)0)); // stop key is
exclusive
ResultScanner rs = htable.getScanner(scan);
try {
for (Result r = rs.next(); r != null; r = rs.next()) {
// process result…
} finally {
rs.close(); // always close the ResultScanner!
}

5.7.4. Delete

Delete 从表中删除壹行. 删除通过HTable.delete 运转。

HBase
未有退换数据的适度格局。所以经过创办名叫墓碑(tombstones)的新标识进行拍卖。这么些墓碑和逝世的值。在主紧缩时清除。

參考 Section 五.8.一.5, “Delete”
获取删除列版本号的多多任何信息。參考Section 玖.7.伍.五, “Compaction”
获取许多别的有关紧缩的音讯。
5.8. 版本号

二个 {row, column, version}
元组是HBase中的二个单元(cell).但是有望会有那么些多的单元的行和列是同样的,能够选用版本号来不一致区别的单元.

rows和column
key是用字节数组表示的,version则是用三个长整型表示。这些long的值使用
java.util.Date.get提姆e() 也许 System.currentTimeMillis()发生的。

那就象征他的意思是“当明天子和一九6八-0一-0一 UTC的时日差,单位皮秒。

在HBase中,版本号是按倒序排列的,因而当读取这些文件的时候,初阶找到的是多年来的版本号。

稍稍人不是10分清楚HBase单元(cell)的意思。

贰个科学普及的标题是:

假设有多个包括版本号写操作同一时候发起,HBase会保存全部还是会保持最新的一个?[16]

能够发起包括版本号的写操作。可是他们的版本号顺序和操作顺序相反吗?[17]

以下大家介绍下在HBase中版本号是如何工作的。[18].
伍.八.壹. HBase的操作(包涵版本号操作)

在这一章大家来精心看看在HBase的一一主要操作中版本号起到了如何效益。
5.8.1.1. Get/Scan

Gets实在Scan的功底上贯彻的。

可见切实參见以下的研究 Get 同样能够用 Scan来描写叙述.

私下认可情状下。就算你没有点名版本号。当您利用Get操作的时候,会回去近年来版本号的Cell(该Cell可能是最新写入的,但不能够保险)。暗中认可的操作能够那样更动:

假设想要返回返回两个以上的把版本号,參见Get.setMaxVersions()

假设想要返回的版本号不仅仅是近期的,參见 Get.setTimeRange()

要向查询的最新版本号要小于或等于给定的这个值,这就意味着给定的'近期'的值能够是某一个时间点。能够使用0到你想要的时间来设置。还要把max versions设置为1.

5.8.1.2. 默认 Get 样例

以下的Get操作会仅仅收获新型的叁个版本号。

    Get get = new Get(Bytes.toBytes("row1"));
    Result r = htable.get(get);
    byte[] b = r.getValue(Bytes.toBytes("cf"), Bytes.toBytes("attr"));  // returns current version of value          

伍.八.1.3. 富含的版本号的Get样例

以下的Get操作会得到近期的三个版本号。

    Get get = new Get(Bytes.toBytes("row1"));
    get.setMaxVersions(3);  // will return last 3 versions of row
    Result r = htable.get(get);
    byte[] b = r.getValue(Bytes.toBytes("cf"), Bytes.toBytes("attr"));  // returns current version of value
    List<KeyValue> kv = r.getColumn(Bytes.toBytes("cf"), Bytes.toBytes("attr"));  // returns all versions of this column       

5.8.1.4. Put

1个Put操作会给3个cell,创造2个本子号,暗中认可使用当前几天子戳。当然你也可以团结设置时间戳。那就意味着你可见把日子设置在过去依然现在,也许专擅动用一个Long值。

要想覆盖贰个共处的值,就象征你的row,column和版本号必须完全相等。
伍.捌.壹.肆.1. 不指明版本号的样例

以下的Put操作不指明版本号,所以HBase会用当下光阴作为版本号。

      Put put = new Put(Bytes.toBytes(row));
      put.add(Bytes.toBytes("cf"), Bytes.toBytes("attr1"), Bytes.toBytes( data));
      htable.put(put);

5.捌.①.四.二. 指明版本号的样例

以下的Put操作,指明了版本号。

      Put put = new Put( Bytes.toBytes(row ));
      long explicitTimeInMs = 555;  // just an example
      put.add(Bytes.toBytes("cf"), Bytes.toBytes("attr1"), explicitTimeInMs, Bytes.toBytes(data));
      htable.put(put);

5.8.1.5. Delete

有二种不一样等级次序的里边删除标识 [19]:

Delete: 删除列的指定版本号.

Delete column: 删除列的全部版本号.

Delete family: 删除特定列族全部列

当删除一行,HBase将中间对每三个列族创立墓碑(非每二个单独列)。

剔除操作的贯彻是成立三个墓碑标志。比方,大家想要删除2个本子号,或许暗中认可是currentTimeMillis。就表示“删除比那个版本号更早的整整版本号”.HBase不会去改那几个数据,数据不会即时从文件里删除。

他利用删除标识来屏蔽掉那么些值。[20]若你知道的版本号比数据中的版本号晚,就象征那1行中的全体数量都会被去除。

參考 Section 玖.柒.5.四, “KeyValue” 获取内部 KeyValue 格式大多其余信息。
5.捌.二. 存世的限制

至于版本号另一些bug(可能叫做未完结的功用),安排在下个版本号完成。
伍.八.2.一. 刨除标志误标新Put 的数额

除去标识操作恐怕会标识其后put的数据。

[21]纪事,当写下二个墓碑标志后,仅仅有下八个主紧缩操作发起之后,墓碑才会去掉。

假若你剔除全体<=
时间T的数码。但后来,你又运行了二个Put操作,时间戳<=
T。纵然这些Put发生在剔除操作之后,他的多寡也打上了墓碑标识。这一个Put并不会破产,但您做Get操作时,会注意到Put未有发生影响。仅仅有叁个主紧缩运营后。1切才会苏醒平日。

1旦你的Put操作一向使用升序的本子号,这么些标题不会有震慑。可是正是你不体贴时间,也说不定出现该情况。仅仅需删除和插入火速互相尾随,就有机遇在平等阿秒中相遇。

五.八.二.2. 主紧缩改造查询的结果

“设想一下,你多少个cell有多少个本子号t一,t2和t3。你的maximun-version设置是2.当你请求获取全部版本号的时候。仅仅会回来八个,t二和t三。借使你将t二和t三删除,就会回去t一。可是1旦在剔除在此之前,产生了major
compaction操作。那么如何值都不好回去了。[22]”

5.9. 排序

整套数据模型操作 HBase 重回排序的数量。

先是行。再是列族。然后是列修饰(column qualifier),
最终是时间戳(反向排序,所以新型的在前).
伍.拾. 列的元数据

对列族,未有中间的KeyValue之外的元数据保存。那样。HBase不仅在1行中援助更多列。并且援救行之间不等的列。
由你自个儿担负盯梢列名。

唯一获得列族的全体列名的方法是拍卖整个行。HBase内部保存数据多数任何新闻,请參考
Section 九.7.5.肆, “KeyValue”.
伍.1壹. 联袂查询(Join)

HBase是不是补助联合是二个英特网常问难点。轻巧的话 :
不帮助。至少不想守旧卡宴DBMS那样援助(如 SQL中带 equi-joins 或 outer-joins).
正如本章描写叙述的,读数据模型是 Get 和 Scan.

但并不意味着等价联合无法在应用程序中支持。仅仅是必须自身做。
二种办法,要么提示要写到HBase的数额,要么查询表并在利用或MapReduce代码中做联合(如
ENVISIONDBMS所体现,有两种步骤来贯彻。重视于表的高低。如 nested loops vs.
hash-joins).
哪个更加好?正视于您筹算做哪些,所以未有一个10足的应对适合任哪个地点方。


民用笔记
图片 15
Client
• 包涵訪问HBase的接口并保障cache来增长速度对HBase的訪问
Zookeeper
确定保障不论什么日期,集群中可是有1个master
存贮全体Region的寻址入口。
实时监控Region server的上线和下线新闻。并实时通报Master
存储HBase的schema和table元数据
Master
为Region server分配region
承担Region server的载重均衡
发觉失效的Region server并又一遍分配其上的region
治本用户对table的增加和删除改操作
RegionServer
• Region server维护region,管理对那一个region的IO请求
• Region server担当切分在运营进度中变得过大的region
Region
HBase自个儿积极把表水平划分成多个区域(region),每一个region会保存贰个表
当中某段三番五次的数据;每一个表壹開始仅仅有多个region,随着数据持续插
入表,region不断叠加,当增大到贰个阀值的时候,region就会等分会
八个新的region(裂变);
当table中的行不断加多,就会有更增添的region。那样一张完整的表
被保存在三个Regionserver 上。
Memstore 与 storefile
1个region由多个store组成,八个store相应三个CF(列族)
store包蕴位于内部存款和储蓄器中的memstore和位于磁盘的storefile写操作先写入memstore,当memstore中的数据达到有个别阈值,hregionserver会运营flashcache进度写入storefile,每回写入造成独立的二个storefile
当storefile文件的数额增进到一定阈值后,系统会开展统壹(minor、major
compaction),在联合进程中会举行版本号集合和删除专门的学业(majar),形成更加大的storefile当二个region全部storefile的大小和越过一定阈值后,会把当下的region切割为八个,并由hmaster分配到对应的regionserver服务器,落成负载均衡

client检索数据,先在memstore找,找不到再找storefileHRegion是HBase中布满式存款和储蓄和负载均衡的微乎其微单元。最小单元就意味着不相同的HRegion可以布满在不一样的
HRegion server上。
– HRegion由三个或然四个Store组成,每1个store保存叁个columns family。


各类Strore又由四个memStore和0至多少个StoreFile组成。如图:StoreFile以HFile格式保存在HDFS上。
图片 16
图片 17

相关文章