HBase是基于Google BigTable模型开发的,典型的key/value系统
1. HBase数据模型基本结构
2. HBase数据模型的基本概念
- Schema,Table
1. HBase schema可以有多个Table
2. 每个Table可由多个Column Family组成。
3. HBase列族中的列可以随意定义,因为HBase是无模式的。
- Row Key: HBase有很多行(HBase物理存储时,不是按照行进行存储,而是按照列进行存储),每一行有一个主键,称为RowKey,相当于索引,通过RowKey,可以很快速的定位到一行。HBase每一行中可以有多个Column Family
1. Byte array
2. 表中每条记录的“主键”
3. row key可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes左右),HBase内部保存为字节数组
4. 每一行的rowkey必须是唯一的
5. 在HBase内存,数据按照row key的字典序(byte order)排序存储,因此设计key时要充分排序存储这个特性,将经常一起读取的行存储放到一起。
- Column Family:每个Column Family可以有很多列,上图中有contents、anchor列族。anchor列族中有两个列 cnnsi.com和my.look.ca。通过Row Key定位到行,通过Column Family定位到列
1. 拥有一个名称(string)
2. 包含一个或者多个相关列
3. table在水平方向有一个或者多个column family组成,一个column family中可以由任意多个column组成,即column family支持动态扩展,无需预先定义column的数量以及类型,所有column均以二进制格式存储,用户需要自行进行类型转换。
4. 列名都以列族作为前缀。例如’courses:history’,’courses:math’,都属于courses 这个列族。
- Column
1. 属于某一个column family
2. 包含在某一列中
3. familyName:columnName
4. 列名都以列族作为前缀。例如’courses:history’,’courses:math’,都属于courses 这个列族。
- Version Number
1. 每个rowkey唯一,即每行内部没有重复的时间戳
2. 默认值是系统时间戳
3. 类型为Long
4. 无需以递增的顺序插入
- Value(Cell,单元格):
1. Byte array
2. 单元格是用来存放数据值的位置,一个单元格中可以多份数据(数据具有版本号),如上图中,contents的有html代码,有三份数据,分别是t3,t5和t6时刻的数据,t3,t5和t6是时间戳
3. Table可以非常稀疏, 很多cell 可以是空的
4. Cell由{行键, 列(列簇名:列名), 时间戳版本号} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。
3. HBase逻辑视图
3.1 JSON Style
上图中,对前面提到的HBase数据模型进行了实例演示:
- cutting和tlipcon是row key,那么row key是如何定义的?一行可以有多个列簇,例如info和roles列簇
- info和roles是column family的名字,每个列簇中包含多个列,比如info中包含height和state两列
- 相同名称的column family可以包含不同的列名和列的个数,例如roles列族在两行中是不同的
- 一列可以包含多个值,使用时间戳标识
- 列里面有value,例如9ft,CA等。要查找到value,那么需要通过row key、info和column名字
3.2 Relational table style
下图是以行列形式表现的数据模型
4. HBase基本操作
4.1 HBase Shell支持的操作hbase(main):001:0> help
HBase Shell, version 1.0.0, r6c98bff7b719efdb16f71606f3b7d8229445eb81, Sat Feb 14 19:49:22 PST 2015
Type 'help "COMMAND"', (e.g. 'help "get"' -- the quotes are necessary) for help on a specific command.
Commands are grouped. Type 'help "COMMAND_GROUP"', (e.g. 'help "general"') for help on a command group.
COMMAND GROUPS:
Group name: general
Commands: status, table_help, version, whoami
Group name: ddl
Commands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, show_filters
Group name: namespace
Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables
Group name: dml
Commands: append, count, delete, deleteall, get, get_counter, incr, put, scan, truncate, truncate_preserve
Group name: tools
Commands: assign, balance_switch, balancer, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, close_region, compact, compact_rs, flush, major_compact, merge_region, move, split, trace, unassign, wal_roll, zk_dump
Group name: replication
Commands: add_peer, append_peer_tableCFs, disable_peer, enable_peer, list_peers, list_replicated_tables, remove_peer, remove_peer_tableCFs, set_peer_tableCFs, show_peer_tableCFs
Group name: snapshots
Commands: clone_snapshot, delete_all_snapshot, delete_snapshot, list_snapshots, restore_snapshot, snapshot
Group name: configuration
Commands: update_all_config, update_config
Group name: security
Commands: grant, revoke, user_permission
Group name: visibility labels
Commands: add_labels, clear_auths, get_auths, list_labels, set_auths, set_visibility
单行操作:
put/get/scan
多行操作:
Scan
MultiPut
HBase不支持join操作,需要借助于Map-Reduce实现