HBase

1. 简介

1.1 定义

  • HBase是一个分布式的、面向列的开源数据库
  • 同样数据保存到列式数据库中
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

  • 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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值