【HBase2】HBase数据模型

【HBase二】HBase数据模型

HBase是基于Google BigTable模型开发的,典型的key/value系统

 

1. HBase数据模型基本结构


【HBase2】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. 方便快速查找。

     4. 每一行的rowkey必须是唯一的

 

  • Column Family:每个Column Family可以有很多列,上图中有contents、anchor列族。anchor列族中有两个列  cnnsi.com和my.look.ca。通过Row Key定位到行,通过Column Family定位到列

     1. 拥有一个名称(string)

     2. 包含一个或者多个相关列

 

  • Column

     1. 属于某一个column family

     2. 包含在某一列中

     3. familyName:columnName

 

  • 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 可以是空的

 

3. HBase逻辑视图

3.1 JSON Style


【HBase2】HBase数据模型
上图中,对前面提到的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

下图是以行列形式表现的数据模型
【HBase2】HBase数据模型

 

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