NoSQLHBase简介

参考 
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

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

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地图