目录
  1. 1. HBase
  2. 2. 概念
    1. 2.1. 特点
    2. 2.2. NoSql
    3. 2.3. 范例
  3. 3. 数据存储
    1. 3.1. RowKey
    2. 3.2. 列簇
    3. 3.3. 时间戳
    4. 3.4. Cell
  4. 4. 基本操作
    1. 4.1. 1.进入HBase客户端命令行
    2. 4.2. 2.查看帮助命令
    3. 4.3. 3.查看当前数据库中有哪些表
    4. 4.4. 3.2 表的操作
      1. 4.4.1. 1.创建表
      2. 4.4.2. 2.插入数据到表
      3. 4.4.3. 3.扫描查看表数据
      4. 4.4.4. 4.查看表结构
      5. 4.4.5. 5.更新指定字段的数据
      6. 4.4.6. 6.查看“指定行”或“指定列族:列”的数据
      7. 4.4.7. 7.统计表数据行数
      8. 4.4.8. 8.删除数据
      9. 4.4.9. 9.清空表数据
      10. 4.4.10. 10.删除表
      11. 4.4.11. 11.变更表信息
    5. 4.5. namespace
HBase相关

HBase

概念

Hadoop Base
Hadoop没法实时增删改查
建立在 HDFS 之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的 NoSQL 数据库系统

特点

  1. 它仅能通过主键(row key)和主键的 range 来检索数据;
  2. Hbase查询数据功能简单,不支持 join 等复杂操作;
  3. 不支持复杂的事务(行级的事务);
  4. Hbase 中支持的数据类型:byte[] ;
  5. 主要用来存储结构化和半结构化的数据
  6. 大:一个表可以有上十亿行,上百万列
  7. 面向列:面向列(族)的存储和权限控制,列(族)独立检索
  8. 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏, 不需要指定列名可一行有这个列 一行没有这个列

NoSql

非关系性数据库

范例

HBase、Redis、MongoDB

数据存储

基于HDFS, 就算单表有100G的数据,按照HDFS的规则也会将单文件拆分成一个个block块,key信息存放在block的描述信息文件中

RowKey

Rowkey 是用来检索记录的主键。类似MySql中的主键
Rowkey 行键 (Rowkey)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-
100bytes)。在 HBase 内部,rowkey 保存为字节数组。HBase 会对表中的数据 按照 Rowkey 排序(字
典顺序) 。
存储时,数据按照 Rowkey 的字典序(byte order)排序存储。设计 key 时,要充分排序存储这个特
性,将经常一起读取的行存储放到一起。

列簇

HBase表中的每个列,都归属与某个列簇。列簇是表的 schema 的一部分(而列不是),必须在使用
表之前定义。
列名都以列簇作为前缀。例如 courses:history , courses:math 都属于 courses 这个列簇。
列族越多,在取一行数据时所要参与 IO、搜寻的文件就越多,所以,如果没有必要,不要设置太
多的列族。

个人理解对字段进行分类分组

时间戳

数据的版本号
每个数据的存储单元中都保存着同一份数据的多个版本,版本通过时间戳来索引。时间戳的类型是 64 位整型。
时间戳可以由 HBase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。
时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的
时间戳。
不同版本的数据按照时间倒序排序,即最新的数据排在最前面。

Cell

由{rowkey, column, version} 唯一确定的单元。
Cell 中的数据是没有类型的,全部是字节码形式存储。
获取数据的方式: get(table -> rowkey -> column family -> column name -> ts)

基本操作

1.进入HBase客户端命令行

1
hbase shell

2.查看帮助命令

1
hbase(main):001:0> help

3.查看当前数据库中有哪些表

1
hbase(main):002:0> list

3.2 表的操作

1.创建表

1
hbase(main):005:0> create 'student','info'

加namespace
ps: 类似Mysql中库的概念 默认有个default的namespace 不指定namespace的都会进入到该命名空间

1
2
3
hbase(main):004:0> create_namespace 'test'
# create 'ns1:t1', 'f1' info代表列簇
hbase(main):005:0> create 'test:student','info'

2.插入数据到表

1
2
3
4
5
6
# put 'ns1:t1', 'r1', 'c1', 'value'
hbase(main):003:0> put 'test:student','1001','info:sex','male'
hbase(main):004:0> put 'test:student','1001','info:age','18'
hbase(main):005:0> put 'test:student','1002','info:name','zhangsan'
hbase(main):006:0> put 'test:student','1002','info:sex','female'
hbase(main):007:0> put 'test:student','1002','info:age','20'

3.扫描查看表数据

1
2
3
hbase(main):008:0> scan 'test:student'
hbase(main):009:0> scan 'test:student',{STARTROW => '1001', STOPROW => '1002'}
hbase(main):010:0> scan 'test:student',{STARTROW => '1001'}

4.查看表结构

1
hbase(main):020:0> describe 'test:student'

5.更新指定字段的数据

1
2
hbase(main):012:0> put 'test:student','1001','info:name','lisi'
hbase(main):013:0> put 'test:student','1001','info:age','100'

6.查看“指定行”或“指定列族:列”的数据

1
2
hbase(main):014:0> get 'test:student','1001'
hbase(main):015:0> get 'test:student','1001','info:name'

7.统计表数据行数

1
hbase(main):021:0> count 'test:student'

8.删除数据

删除某rowkey的全部数据:

1
hbase(main):016:0> deleteall 'test:student','1001'

删除某rowkey的某一列数据:

1
hbase(main):017:0> delete 'test:student','1002','info:sex'

9.清空表数据

1
hbase(main):018:0> truncate 'test:student'

提示:清空表的操作顺序为先disable,然后再truncate。

10.删除表

首先需要先让该表为disable状态:

1
hbase(main):019:0> disable 'test:student'

然后才能drop这个表:

1
hbase(main):020:0> drop 'test:student'

提示:如果直接drop表,会报错:ERROR: Table test:student is enabled. Disable it first.

11.变更表信息

将info列族中的数据存放3个版本:

1
2
hbase(main):022:0> alter 'test:student',{NAME=>'info',VERSIONS=>3}
hbase(main):022:0> get 'test:student','1001',{COLUMN=>'info:name',VERSIONS=>3}

namespace

文章作者: Fibonacci
文章链接: http://sovwcwsfm.com/blog/page/hbase.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blog