【HBase二】HBase数据模型

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

猜你喜欢

转载自bit1129.iteye.com/blog/2191629