HBase简介

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

Architecture

65. Overview

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界面

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

NoSQL 1

73. HDFS

NoSQL 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

NoSQL 3

Timestamp

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

20. Conceptual View

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

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

下图是一个模拟,旨在表达表明地方我们所说的,便于我们知晓:

NoSQL 5

21. Physical View

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

NoSQL 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 cellNoSQL, 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

NoSQL 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

 

网站地图xml地图