1. 简介
1.1 定义
RowKey | FILE INFO | SAVE INFO |
---|---|---|
1 | name:file1.txt type:txt size:1024 | path:/home/pics creator:Jerry |
2 | name:file2.jpg type:jpg size:5032 | path:/home creator:Tom |
非结构化数据存储
2 HBase在Hadoop生态中的地位及使用场景
HBase与HDFS关系
HBase使用场景
- 瞬间写入量很大
- 大量数据需要长期保存, 且数量会持续增长
- HBase不适合有join, 多级索引, 表关系复杂的数据模型
- 跨行事务场景不适合
3 HBase的数据模型
- NameSpace: 关系型数据库的"数据库"(database)
- 表(table):用于存储管理数据,具有稀疏的、面向列的特点。HBase中的每一张表,就是所谓的大表(Bigtable),可以有上亿行,上百万列。对于为值为空的列,并不占用存储空间,因此表可以设计的非常稀疏。
- 行(Row):在表里面,每一行代表着一个数据对象,每一行都是以一个行键(Row Key)来进行唯一标识的, 行键并没有什么特定的数据类型, 以二进制的字节来存储
- 列(Column): HBase的列由 Column family 和 Column qualifier 组成, 由冒号: 进行行间隔, 如 family: qualifier
- 行键(RowKey):类似于MysqL中的主键,HBase根据行键来快速检索数据,一个行键对应一条记录。与MysqL主键不同的是,HBase的行键是天然固有的,每一行数据都存在行键。
- 列族(ColumnFamily):是列的集合。列族在表定义时需要指定,而列在插入数据时动态指定。列中的数据都是以二进制形式存在,没有数据类型。在物理存储结构上,每个表中的每个列族单独以一个文件存储。一个表可以有多个列簇。
- 列修饰符(Column Qualifier) : 列族中的数据通过列标识来进行映射, 可以理解为一个键值对(key-value), 列修饰符(Column Qualifier) 就是key 对应关系型数据库的列
- 时间戳(TimeStamp):是列的一个属性,是一个64位整数。由行键和列确定的单元格,可以存储多个数据,每个数据含有时间戳属性,数据具有版本特性。可根据版本(VERSIONS)或时间戳来指定查询历史版本数据,如果都不指定,则默认返回最新版本的数据。
- 区域(Region):HBase自动把表水平划分成的多个区域,划分的区域随着数据的增大而增多。
8 HBase 的安装与Shell操作
1 安装
解压缩配置环境变量
如果电脑休眠,则需要重新启动
/root/bigdata/hbase/bin/start-hbase.sh
hbase shell
2 HBase shell命令
- 连接集群
hbase shell
- 创建表
create 'user','base_info'
- 删除表
disable 'user'
drop 'user'
- 创建名称空间
create_namespace 'test'
- 展示现有名称空间
list_namespace
- 创建表的时候添加namespace
create 'test:user','base_info'
list_namespace_tables 'test'
-
插入数据
put 'user','rowkey_10','base_info:username','Tom'
-
查询表中的所有数据
-
scan 'user'
scan 'user' ,{COLUMNS =>['base_info'],LIMIT=>2}
scan 'user' ,{COLUMNS =>['base_info'],LIMIT=>2,STARTROW=>'rowkey_16'}
scan 'user', {ROWPREFIXFILTER=>'rowkey_22'}
查看多个版本
-
alter 'user',NAME=>'base_info',VERSIONS=>10
-
指定显示多个版本
-
get 'user','rowkey_10',{COLUMN=>'base_info:username',VERSIONS=>2}
-
数据存了多个版本
通过时间戳查询
-
通过TIMERANGE 指定时间范围
-
scan 'user',{COLUMNS => 'base_info', TIMERANGE => [1558323139732, 1558323139866]} get 'user','rowkey_10',{COLUMN=>'base_info:username',VERSIONS=>2,TIMERANGE => [1558323904130, 1558323918954]}
-
通过时间戳过滤器 指定具体时间戳的值
scan 'user',{FILTER => 'TimestampsFilter (1558323139732, 1558323139866)'}
get 'user','rowkey_10',{COLUMN=>'base_info:username',VERSIONS=>2,FILTER => 'TimestampsFilter (1558323904130, 1558323918954)'}
9 happybase操作HBase
启动HBase thrift server : hbase-daemon.sh start thrift
安装happy base
- pip install happybase
- 建立连接
connection.tables()
获取表实例
table = connection.table('mytable')
# api
table.scan() #全表查询
table.row('row_key') # 查询一行
table.rows([row_keys]) # 查询多行
table.put(row_key, {'cf:cq':'value'})
table.delete(row_key, cf_list)
connection.delete_table(table_name, True)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。