31. Joins
HBase不直接join操作,至少不帮助关系型数据库这种join。在HBase中,读取数据通过Get和Scan。
65.3. What Is The Difference Between HBase and Hadoop/HDFS?
HDFS是2个分布式的文件系统,适合储存大文件,但它不可能提供赶快的脾气化的在文书中搜寻。HBase是构建于HDFS基础之上的,并且它援救对大表的中的记录进行快捷搜索和换代。HBase内部将数据存放在HDFS中被索引的“StoreFiles”上以供高速搜索。
69.3. Interface
HMasterInterface接口是操作元数据的显要接口,提供以下操作:
- Table (createTable, modifyTable,
removeTable, enable, disable) - ColumnFamily (addColumn, modifyColumn,
removeColumn) - Region (move, assign, unassign)
25. Column Family
Columns in Apache HBase
are grouped into column
families.
列簇中享有的列成员都有平等的前缀。例如,列courses:history和courses:math都以courses这些列簇的分子。用冒号分隔列簇和列修饰符。列簇前缀必须由得以打字与印刷输出的字符组成。列修饰符能够由任意字节组成。列簇必须在表被定义的时候就宣称好,由此列就不要求在表创立的时候定义了,并且能够每一天新增。
物理上,全体的列簇成员被贮存在联合署名。
20. Conceptual View
在那么些例子中,有多少个表叫“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。
在那些表格中的空的单元格并不占用空间
下图是一个模仿,意在表达表明地点大家所说的,便于我们领会:
28. Versions
在HBase中,{row,column,version}能够规定三个单元格。当行和列被压缩成字节的时候,版本用long类型内定。在HBase中,版本以降序存储,所以,近来的值总是第2被发现。
34. Table Schema Rules Of Thumb
- regions的分寸在十~50GB之间
- cells的尺寸不超越拾MB
- 杰出的,各种表的列簇在一~3个里面。HBase的表不应当被设计成模仿关系型数据库的表
- 一个有1~贰个列簇的表所拥有的regions大概在50~100个左右
- 保证你的列簇名字尽恐怕的短
23. Table
28. Versions
在HBase中,{row,column,version}能够规定二个单元格。当行和列被压缩成字节的时候,版本用long类型内定。在HBase中,版本以降序存款和储蓄,所以,最近的值总是第二被察觉。
24. Row
行遵照row key字典升序存款和储蓄
27.4. Delete
从表中删除1行
70. RegionServer
HRegionServer是RegionServer的贯彻,它承担服务并管制regions。在分布式集群中,三个RegionServer经常运转在八个DataNode上。
Architecture
26. Cells
A {row, column, version} tuple exactly specifies a cell
in
HBase.
70.5. RegionServer Splitting Implementation
region
server处理写请求,它们被累积在内存中叁个叫memstore的地点。一旦memstore文件满了,内容将被写到磁盘上作为store
file。这几个事件称为memstore flush。随着store
file的接踵而来积累,RegionServer将合并它们成大文件,以减小store
file的数量。在每回刷新大概联合之后,region中数据的数码会产生改变。RegionServer依据切分策略来查看是还是不是region太大了依旧应当被切分。
逻辑上,region切分的操作非常粗大略。找2个适龄的地点,将region中的数据切分成多少个新的region。可是,这几个处理的进度并不不难。当切分产生的时候,数据并不是随即被重写到这一个心成立的丫头region上。
29. Sort Order
对此具有的数据模型操作,HBase以数量被储存时的一一重回。首先按行排序,其次按列簇,再其次按列修饰符,最后是timestamp。(PS:前是八个是字典升序,最终三个timestamp是降序)
30. Column Metadata
不存款和储蓄列的元数据,因而,HBase能够支撑每1行有诸多列,行与行以内能够有多样分化的列。
69.3. Interface
HMasterInterface接口是操作元数据的第一接口,提供以下操作:
- Table (createTable, modifyTable,
removeTable, enable, disable) - ColumnFamily (addColumn, modifyColumn,
removeColumn) - Region (move, assign, unassign)
27. Data Model Operations
数据模型有6个关键操作,分别是Get、Put、Scan和Delete。那个操作是运用在表上的。
69. Master
HMaster是Master Server的2个兑现。Master
Server负责监视集群中全数的RegionServer实例,并且它也是享有元数据变动的三个对外接口。在分布式集群中,典型的Master运转在NameNode那台机器上。
54. HBase MapReduce Examples
27. Data Model Operations
数据模型有陆个至关心注重要操作,分别是Get、Put、Scan和Delete。这个操作是利用在表上的。
Data Model
在HBase中,数据被积存在表中,有行和列。那个术语和关系型数据有部分重合,当然那不是三个很好的类比,不过它对大家思想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中的列由3个列簇和3个列修饰符组成,它们之间用冒号分隔(:)
Column Family
列簇由一文山会海的列和它们的值组成,这是根据质量思索的。每三个列簇都有1多级的仓库储存属性,比如:是还是不是它们的值应该被缓存到内部存款和储蓄器中,它们的数据如何被收缩,它们的row
key如何被编码,等等。表中的每壹行都有雷同的列簇,固然一个加以的行在给定的列簇上从没有过存款和储蓄任何数据。
Column Qualifier
三个列修饰符被添加到列簇中为了给钦定的数码片段提供索引。假设,给定的列簇是content,那么,三个列修饰符大概是content:html,其余的还有望是content:pdf。尽管,列簇在表创造的时候就稳定了,可是列修饰符是不明确的,而且差别的行恐怕有不通的列修饰符。
Cell
Timestamp
贰个timestamp被写在各种value的边上,它是1个value的本子修饰符。暗中同意的,timestamp代表数量被RegionServer写入的时间,你也足以在写多少的时候钦点四个两样的timestamp值
Data Model
在HBase中,数据被贮存在表中,有行和列。那些术语和关系型数据有局地重叠,当然那不是三个很好的类比,可是它对大家寻思HBase的象征三个多维的map很有帮扶。
Table
由多行组成
Row
HBase中的行由3个row
key和四个或三个列组成。Rows在储存的时候遵照row
key的字典序存款和储蓄。正因为那样,row
key的宏图就显示煞是重大。基于那一点,相关连的行互相之间存在周边。日常,row
key是三个网址的域名。如若你的row
key是域名,你应当以倒置的法子存款和储蓄它们(比如:org.apache.www,org.apache.mail,org.apache.jira等等)。那样的话,全体的apache域名在表中是相仿的职务,而不是被子域名的首先有个别分离。
Column
HBase中的列由一个列簇和多少个列修饰符组成,它们之间用冒号分隔(:)
Column Family
列簇由壹层层的列和它们的值组成,那是依照质量思量的。每贰个列簇都有1多元的仓库储存属性,比如:是还是不是它们的值应该被缓存到内部存款和储蓄器中,它们的多寡怎么样被缩减,它们的row
key怎么样被编码,等等。表中的每一行都有相同的列簇,即便叁个加以的行在给定的列簇上未曾存储任何数据。
Column Qualifier
八个列修饰符被添加到列簇中为了给钦点的数目片段提供索引。要是,给定的列簇是content,那么,一个列修饰符大概是content:html,其余的还有望是content:pdf。尽管,列簇在表成立的时候就固定了,可是列修饰符是不鲜明的,而且分裂的行或然有不通的列修饰符。
Cell
Timestamp
一个timestamp被写在各样value的1旁,它是贰个value的本子修饰符。暗中同意的,timestamp代表数量被RegionServer写入的大运,你也得以在写多少的时候钦点三个区别的timestamp值
22. Namespace
一个命名空间是表的一个逻辑分组
65. Overview
73. HDFS
34. Table Schema Rules Of Thumb
- regions的轻重在10~50GB之间
- cells的大小不当先十MB
- 独立的,每一种表的列簇在1~3个里面。HBase的表不应当被设计成模仿关系型数据库的表
- 一个有1~1个列簇的表所拥有的regions差不多在50~100个左右
- 保险您的列簇名字尽可能的短
65.3. What Is The Difference Between HBase and Hadoop/HDFS?
HDFS是3个分布式的文件系统,适合储存大文件,但它不可能提供便捷的性格化的在文件中找找。HBase是创设于HDFS基础之上的,并且它帮助对大表的中的记录进行快速搜索和更新。HBase内部将数据存放在HDFS中被索引的“StoreFiles”上以供高速搜索。
Architecture
26. Cells
A {row, column, version} tuple exactly specifies a cell
in
HBase.
27.2. Put
添加新的行到表中,或许更新已经存在的行
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.)
24. Row
行依照row key字典升序存储
71. Regions
27.1. Get
归来钦赐行的天性
27.4. Delete
从表中删除一行
33. Schema Creation
54. HBase MapReduce Examples
69. Master
HMaster是Master Server的三个贯彻。Master
Server负责监视集群中拥有的RegionServer实例,并且它也是持有元数据变动的1个对外接口。在分布式集群中,典型的Master运转在NameNode那台机器上。
22. Namespace
亿万先生官方网站:,二个命名空间是表的贰个逻辑分组
23. Table
73. HDFS
参考
http://hbase.apache.org/book.html\#\_architecture
27.3. Scans
环顾特定属性的多行
70. RegionServer
HRegionServer是RegionServer的贯彻,它肩负服务并保管regions。在分布式集群中,二个RegionServer平时运转在3个DataNode上。
65.1. NoSQL?
HBase是壹种”NoSQL”数据库。“NoSQL”1般指的黑白关系型数据库,大家清楚,关系型数据库扶助SQL,约等于说HBase不援救SQL。非关系型数据库有无数种,伯克利DB是1种本地非关系型数据库,可是,HBase是分布式数据库。从技术上来讲,HBase更像是“Data
Store”,而不是“Data
Base”,因为它贫乏许多关系型数据库的表征,比如:列类型、帮忙索引、触发器、查询语言等等。(PS:意思是,从技术的角度讲,HBase更像一个多少存款和储蓄,而不像数据库)
HBase集群扩充通过扩充RegionServer来达成。假若三个集群从10恢弘到十八个RegionServer,那么,不仅仅是储存体量扩张一倍,连处理能力也会扩张1倍。对于关系型数据库而言,也足以用scale做到那样,不过急需提议的是,那供给特别的硬件和存款和储蓄设备。HBase天性如下:
- 强壹致性读写:HBase不是贰个“最后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界面
27.2. Put
添加新的行到表中,大概更新已经存在的行
20. Conceptual View
在这一个事例中,有二个表叫“webtable”,它涵盖两行数据(com.cnn.www和com.example.www)和多少个列簇(contents,anchor,people)。对于第3行(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。
在这几个表格中的空的单元格并不占用空间
下图是叁个仿照,目的在于表达表明方面我们所说的,便于大家领悟:
29. Sort Order
对此全体的数据模型操作,HBase以数据被积存时的相继再次回到。首先按行排序,其次按列簇,再其次按列修饰符,最后是timestamp。(PS:前是多个是字典升序,最后3个timestamp是降序)
21. Physical View
虽说,在概念上,表看起来像是一行一行的,但大体上,它们是遵循列簇被积存的。多少个新的列修饰符能够在随机时刻被添加到列簇中。
在前头的概念视图中的空的单元格是不被储存的。因而,请求contents:html列并且timestamp为t八将回到未有值。然则,假使不点名timestamp,那么某些列的大部分分值都会被重返。假使内定四个本子,唯有找到的率先个会被重返,因为数量是遵守timestamp降序存款和储蓄的。
65.1. NoSQL?
HBase是一种”NoSQL”数据库。“NoSQL”1般指的好坏关系型数据库,大家明白,关系型数据库帮助SQL,也正是说HBase不支持SQL。非关系型数据库有为数不少种,BerkeleyDB是1种本地非关系型数据库,可是,HBase是分布式数据库。从技术上来讲,HBase更像是“Data
Store”,而不是“Data
Base”,因为它缺少许多关系型数据库的特征,比如:列类型、帮忙索引、触发器、查询语言等等。(PS:意思是,从技术的角度讲,HBase更像三个数额存储,而不像数据库)
HBase集群扩充通过扩张RegionServer来实现。若是一个集群从拾恢宏到1七个RegionServer,那么,不仅仅是储存体积扩充壹倍,连处理能力也会扩展一倍。对于关系型数据库而言,也得以用scale做到那样,可是供给建议的是,这要求专门的硬件和存款和储蓄设备。HBase性子如下:
- 强一致性读写: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界面
50. HBase as a MapReduce Job Data Source and Data Sink
HBase能够看作MapReduce作业的数据源。对于读写HBase的MapReduce作业,建议利用TableMapper和TableReducer。
假定你运转HBase作为数据源的MapReduce作业,你必要在配备文件中钦赐表和列名。
当你从HBase读取数据的时候,TableInputFormat请求regions的列表并且作为一个map。
71. Regions
31. Joins
HBase不间接join操作,至少不扶助关系型数据库那种join。在HBase中,读取数据通过Get和Scan。
65. Overview
65.2. When Should I Use HBase?
并不是有着的难题都符合用HBase
率先、确定保障您有丰硕的数据。假诺你有巨大的数量行,那么HBase是三个不错的选拔。假诺你只有数千依然百万的数码,那么使用传统的关系型数据库恐怕越来越好,因为其实你的这么些数量只怕只必要多少个还是八个节点就能处理得完,那样的话集群中的别的的节点就处于空闲状态。
第二、确认保证您不需求用到关系型数据库的表征(比如:固定类型的列、帮忙索引、事务、查询语言等等)。基于关系型数据库营造的应用无法经过简单的更动JDBC驱动来传输到HBase中。从昂科雷DBMS到HBase是截然相反的两套设计。
其3、确认保证您有丰硕的硬件。因为当DataNode数量低于5的时候HDFS将不可能正常办事了。
25. Column Family
Columns in Apache HBase
are grouped into column
families.
列簇中具备的列成员都有同等的前缀。例如,列courses:history和courses:math都以courses这么些列簇的积极分子。用冒号分隔列簇和列修饰符。列簇前缀必须由得以打字与印刷输出的字符组成。列修饰符能够由任意字节组成。列簇必须在表被定义的时候就扬言好,因而列就不必要在表成立的时候定义了,并且能够随时新增。
大体上,全部的列簇成员被贮存在一块。
参考
http://hbase.apache.org/book.html\#\_architecture
21. Physical View
尽管如此,在概念上,表看起来像是1行1行的,但大体上,它们是依照列簇被储存的。2个新的列修饰符能够在随心所欲时刻被添加到列簇中。
在前面的定义视图中的空的单元格是不被积存的。因而,请求contents:html列并且timestamp为t八将赶回未有值。可是,假若不钦赐timestamp,那么某些列的绝超过八分之四分值都会被重临。如若内定三个版本,唯有找到的首先个会被再次来到,因为数量是依据timestamp降序存款和储蓄的。
27.1. Get
回到钦定行的品质
50. HBase as a MapReduce Job Data Source and Data Sink
HBase可以视作MapReduce作业的数据源。对于读写HBase的MapReduce作业,提议利用TableMapper和TableReducer。
假诺你运营HBase作为数据源的MapReduce作业,你须要在配置文件中钦赐表和列名。
当你从HBase读取数据的时候,TableInputFormat请求regions的列表并且作为1个map。
33. Schema Creation
65.2. When Should I Use HBase?
并不是有着的标题都严丝合缝用HBase
率先、确认保障您有丰硕的数目。若是你有许许多多的数码行,那么HBase是三个不利的选取。假如您唯有数千也许百万的多少,那么使用古板的关系型数据库恐怕更加好,因为实在你的这个数据也许只供给三个要么四个节点就能处理得完,那样的话集群中的别的的节点就处在空闲状态。
其次、确定保障您不必要用到关系型数据库的特征(比如:固定类型的列、扶助索引、事务、查询语言等等)。基于关系型数据库构建的使用无法通过不难的变更JDBC驱动来传输到HBase中。从ENCOREDBMS到HBase是全然相反的两套设计。
其3、确定保证您有足够的硬件。因为当DataNode数量紧跟于5的时候HDFS将无法不奇怪干活了。
30. Column Metadata
不存储列的元数据,因而,HBase能够扶助每一行有好多列,行与行期间能够有各样差异的列。
27.3. Scans
举目4望特定属性的多行
70.5. RegionServer Splitting Implementation
region
server处理写请求,它们被累积在内部存款和储蓄器中三个叫memstore的地点。1旦memstore文件满了,内容将被写到磁盘上作为store
file。这一个事件称为memstore flush。随着store
file的持续积累,RegionServer将合并它们成大文件,以缩减store
file的数据。在历次刷新或然联合之后,region中数据的数量会产生转移。RegionServer根据切分策略来查看是或不是region太大了只怕应当被切分。
逻辑上,region切分的操作很简短。找1个适当的职分,将region中的数据切分成四个新的region。但是,这一个处理的进程并不不难。当切分产生的时候,数据并不是及时被重写到这些心创立的姑娘region上。