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)

  • 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

73. HDFS

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

Timestamp

  一个timestamp被描绘以每个value的边,它是一个value的本子修饰符。默认的,timestamp代表数量被RegionServer写副的时间,你为堪在描写多少的上指定一个不同的timestamp值

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”的履行有5只版本,而row
key为“com.example.www”的施行有1个版。contents:html列包含全体网站的HTML。

以斯表中之亏欠的独元格并无占空间

产图是一个学,目的在讲说明方面我们所说的,便于我们懂得:

21. Physical View

虽说,在概念上,表看起像是单排一行的,但大体上,它们是据列簇于积存的。一个初的列修饰符可以以随心所欲时刻被补加至列簇中。

每当头里的概念视图中的空的只有元格是不被储存的。因此,请求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

34. Table Schema Rules Of Thumb

  • regions的深浅在10~50GB之间
  • cells的轻重非超越10MB
  • 突出的,每个表底列簇以1~3个以内。HBase的申不应该叫设计改为模仿关系项目数据库的阐明
  • 一个有1~2个列簇的表所拥有的regions大约于50~100个左右
  • 维持您的列簇名字尽可能的不够

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