HBase简介

Architecture

65.2. When Should I Use HBase?

并不是所有的难点都严丝合缝用HBase

先是、确保您有丰盛的数额。假诺你有不可估摸的多少行,那么HBase是一个毋庸置疑的挑三拣四。若是您唯有数千仍旧百万的数据,那么使用传统的关系型数据库可能更好,因为实际你的那几个数量也许只须求一个如故五个节点就能处理得完,那样的话集群中的别的的节点就高居空闲状态。

第二、确保您不须要用到关系型数据库的特色(比如:固定类型的列、支持索引、事务、查询语言等等)。基于关系型数据库创设的选拔不可能因而简单的更改JDBC驱动来传输到HBase中。从RDBMS到HBase是全然相反的两套设计。

其三、确保您有丰富的硬件。因为当DataNode数量紧跟于5的时候HDFS将不能正常工作了。

73. HDFS

Java 1

20. Conceptual View

Java 2

在这么些事例中,有一个表叫“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”的行有5个版本,而row
key为“com.example.www”的行有1个本子。contents:html列包涵全体网站的HTML。

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

下图是一个仿照,意在表达表达方面大家所说的,便于我们领略:

Java 3

27. Data Model Operations

数据模型有4个至关紧要操作,分别是Get、Put、Scan和Delete。那几个操作是运用在表上的。

71. Regions

Java 4

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

HDFS是一个分布式的文件系统,适合储存大文件,但它不可以提供高速的个性化的在文件中查找。HBase是打造于HDFS基础之上的,并且它支持对大表的中的记录举办快捷搜索和换代。HBase内部将数据存放在HDFS中被索引的“StoreFiles”上以供高速搜索。

27.2. Put

添加新的行到表中,或者更新已经存在的行

69. Master

HMaster是Master Server的一个完毕。Master
Server负责监视集群中具有的RegionServer实例,并且它也是装有元数据变动的一个对外接口。在分布式集群中,典型的Master运行在NameNode那台机器上。

33. Schema Creation

Java 5

28. Versions

在HBase中,{row,column,version}可以规定一个单元格。当行和列被压缩成字节的时候,版本用long类型指定。在HBase中,版本以降序存储,所以,目前的值总是第一被察觉。

Data Model

在HBase中,数据被积存在表中,有行和列。这几个术语和关系型数据有部分重叠,当然那不是一个很好的类比,可是它对大家考虑HBase的代表一个多维的map很有救助。

Table

  由多行组成

Row

  HBase中的行由一个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

  列簇由一层层的列和它们的值组成,那是根据品质考虑的。每一个列簇都有一多元的仓储属性,比如:是或不是它们的值应该被缓存到内存中,它们的数据怎么样被削减,它们的row
key如何被编码,等等。表中的每一行都有同样的列簇,固然一个加以的行在给定的列簇上从未有过存储任何数据。

Column Qualifier

  一个列修饰符被添加到列簇中为了给指定的数目片段提供索引。要是,给定的列簇是content,那么,一个列修饰符可能是content:html,其余的还有可能是content:pdf。即使,列簇在表创造的时候就稳定了,不过列修饰符是不确定的,而且不相同的行可能有梗塞的列修饰符。

Cell

Java 6

Timestamp

  一个timestamp被写在各样value的边沿,它是一个value的本子修饰符。默许的,timestamp代表数量被RegionServer写入的流年,你也得以在写多少的时候指定一个不一样的timestamp值

25. Column Family

Columns in Apache HBase
are grouped into column
families.

列簇中兼有的列成员都有同等的前缀。例如,列courses:history和courses:math都是courses这些列簇的成员。用冒号分隔列簇和列修饰符。列簇前缀必须由得以打印输出的字符组成。列修饰符可以由任意字节组成。列簇必须在表被定义的时候就声称好,因而列就不要求在表创建的时候定义了,并且可以随时新增。

大体上,所有的列簇成员被储存在共同。

31. Joins

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

69.3. Interface

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

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

27.1. Get

回到指定行的性质

27.3. Scans

环顾特定属性的多行

65. Overview

23. Table

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

HBase可以看做MapReduce作业的数据源。对于读写HBase的MapReduce作业,建议采纳TableMapper和TableReducer。

设若您运行HBase作为数据源的MapReduce作业,你需求在计划文件中指定表和列名。

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

 

27.4. Delete

从表中删除一行

21. Physical View

固然,在概念上,表看起来像是一行一行的,但大体上,它们是遵守列簇被贮存的。一个新的列修饰符可以在随机时刻被添加到列簇中。

Java 7

在前头的概念视图中的空的单元格是不被积存的。由此,请求contents:html列并且timestamp为t8将重临没有值。不过,假诺不指定timestamp,那么某个列的绝超过半数分值都会被重返。若是指定七个本子,唯有找到的首先个会被重回,因为数量是听从timestamp降序存储的。

70.5. RegionServer Splitting Implementation

region
server处理写请求,它们被累积在内存中一个叫memstore的地点。一旦memstore文件满了,内容将被写到磁盘上作为store
file。那个事件称为memstore flush。随着store
file的不断积累,RegionServer将合并它们成大文件,以减掉store
file的数据。在每便刷新或者统一之后,region中数据的数量会生出变更。RegionServer依据切分策略来查阅是还是不是region太大了依旧应当被切分。

逻辑上,region切分的操作很粗略。找一个适龄的岗位,将region中的数据切分成几个新的region。不过,这么些处理的长河并不不难。当切分暴发的时候,数据并不是即时被重写到那几个心创造的闺女region上。

 

 

参考 
http://hbase.apache.org/book.html\#\_architecture

29. Sort Order

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

22. Namespace

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

54. HBase MapReduce Examples

 

30. Column Metadata

不存储列的元数据,由此,HBase可以扶助每一行有无数列,行与行以内可以有三种分歧的列。

34. Table Schema Rules Of Thumb

  • regions的轻重缓急在10~50GB之间
  • cells的大大小小不超过10MB
  • 杰出的,每个表的列簇在1~3个之间。HBase的表不应有被设计成模仿关系型数据库的表
  • 一个有1~2个列簇的表所拥有的regions大致在50~100个左右
  • Java,有限支持你的列簇名字尽可能的短

70.1. Interface

HRegionRegionInterface既包含数据的操作也饱含region维护的操作

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

26. Cells

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

24. Row

行按照row key字典升序存储

70. RegionServer

HRegionServer是RegionServer的兑现,它承担服务并管理regions。在分布式集群中,一个RegionServer平常运行在一个DataNode上。

65.1. NoSQL?

HBase是一种”NoSQL”数据库。“NoSQL”一般指的是非关系型数据库,大家理解,关系型数据库辅助SQL,也就是说HBase不援助SQL。非关系型数据库有不少种,BerkeleyDB是一种本地非关系型数据库,不过,HBase是分布式数据库。从技术上来讲,HBase更像是“Data
Store”,而不是“Data
Base”,因为它缺乏许多关系型数据库的特色,比如:列类型、扶助索引、触发器、查询语言等等。(PS:意思是,从技术的角度讲,HBase更像一个数码存储,而不像数据库)

HBase集群增添通过伸张RegionServer来已毕。倘若一个集群从10扩展到20个RegionServer,那么,不仅仅是储存容量增加一倍,连处理能力也会扩大一倍。对于关系型数据库而言,也可以用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界面

相关文章