JavaHBase简介

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

Architecture

65. Overview

65.1. NoSQL?

HBase是一种”NoSQL”数据库。“NoSQL”一般指的是非曲直关系型数据库,我们明白,关系型数据库扶助SQL,也就是说HBase不襄助SQL。非关系型数据库有那一个种,Berkeley(Berkeley)DB是一种本地非关系型数据库,可是,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界面

65.2. When Should I Use HBase?

并不是负有的题目都符合用HBase

第一、确保您有丰富的多少。倘使您有大量的多寡行,那么HBase是一个毋庸置疑的采取。虽然您只有数千要么百万的数量,那么使用传统的关系型数据库可能更好,因为实在你的那一个数据也许只需要一个或者三个节点就能处理得完,这样的话集群中的其余的节点就处在空闲状态。

其次、确保您不需要用到关系型数据库的特色(比如:固定类型的列、协理索引、事务、查询语言等等)。基于关系型数据库构建的利用不可以由此简单的变动JDBC驱动来传输到HBase中。从RDBMS到HBase是截然相反的两套设计。

其三、确保您有丰裕的硬件。因为当DataNode数量紧跟于5的时候HDFS将不可能健康办事了。

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

HDFS是一个分布式的文件系统,适合储存大文件,但它无法提供高效的个性化的在文书中摸索。HBase是构建于HDFS基础之上的,并且它扶助对大表的中的记录举办急速搜索和翻新。HBase内部将数据存放在HDFS中被索引的“StoreFiles”上以供高速搜索。

69. Master

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

69.3. Interface

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

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

70. RegionServer

HRegionServer是RegionServer的落实,它担负服务并保管regions。在分布式集群中,一个RegionServer平时运行在一个DataNode上。

70.1. Interface

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

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

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上。

 

 

71. Regions

Java 1

73. HDFS

Java 2

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 3

Timestamp

  一个timestamp被写在每个value的外缘,它是一个value的版本修饰符。默认的,timestamp代表数量被RegionServer写入的时辰,你也足以在写多少的时候指定一个见仁见智的timestamp值

20. Conceptual View

Java 4

在这一个事例中,有一个表叫“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 5

21. Physical View

虽说,在概念上,表看起来像是一行一行的,但大体上,它们是比照列簇被积存的。一个新的列修饰符可以在自由时刻被添加到列簇中。

Java 6

在前边的定义视图中的空的单元格是不被积存的。由此,请求contents:html列并且timestamp为t8将回来没有值。然则,假使不点名timestamp,那么某个列的绝大多数分值都会被重返。假如指定两个版本,只有找到的首先个会被再次回到,因为数量是遵照timestamp降序存储的。

22. Namespace

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

23. Table

24. Row

行依据row key字典升序存储

25. Column Family

Columns in Apache HBase
are grouped into column
families.

列簇中兼有的列成员都有同样的前缀。例如,列courses:history和courses:math都是courses这一个列簇的积极分子。用冒号分隔列簇和列修饰符。列簇前缀必须由得以打印输出的字符组成。列修饰符可以由任意字节组成。列簇必须在表被定义的时候就扬言好,因而列就不需要在表创造的时候定义了,并且能够天天新增。

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

26. Cells

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

27. Data Model Operations

数据模型有4个重点操作,分别是Get、Put、Scan和Delete。这个操作是运用在表上的。

27.1. Get

回来指定行的特性

27.2. Put

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

27.3. Scans

环视特定属性的多行

27.4. Delete

从表中删除一行

28. Versions

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

29. Sort Order

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

30. Column Metadata

不存储列的元数据,由此,HBase能够支撑每一行有过多列,行与行以内可以有多种不同的列。

31. Joins

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

33. Schema Creation

Java 7

34. Table Schema Rules Of Thumb

  • regions的尺寸在10~50GB之间
  • cells的深浅不超越10MB
  • 突出的,每个表的列簇在1~3个里面。HBase的表不应该被设计成模仿关系型数据库的表
  • 一个有1~2个列簇的表所拥有的regions大约在50~100个左右
  • 维持你的列簇名字尽可能的短

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

HBase可以看作MapReduce作业的数据源。对于读写HBase的MapReduce作业,指出利用TableMapper和TableReducer。

一经你运行HBase作为数据源的MapReduce作业,你需要在安排文件中指定表和列名。

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

 

54. HBase MapReduce Examples

 

相关文章