微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HBase

1. 简介

1.1 定义

RowKeyFILE INFOSAVE INFO
1name:file1.txt type:txt size:1024path:/home/pics creator:Jerry
2name:file2.jpg type:jpg size:5032path:/home creator:Tom

结构化数据存储

  • 结构化数据
    • 适合用二维表来展示的数据
  • 结构化数据
    • 结构化数据是数据结构不规则或不完整
    • 没有预定义的数据模型
    • 不方便用数据库二维逻辑表来表现
    • 办公文档、文本、图片、XML, HTML、各类报表、图像和音频/视频信息等

2 HBase在Hadoop生态中的地位及使用场景

HBase与HDFS关系

  • HBase建立在Hadoop文件系统上, 利用了HDFS的容错能力
  • HBase提供对数据的随机实时读/写访问功能
  • 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 => 'f2' 添加列族
    alter 'user', 'delete' => 'f2' 删除列族
    
    

查看多个版本

  • 修改可以显示的版本数量

  • 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

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] 举报,一经查实,本站将立刻删除。

相关推荐