FusionInsight大数据开发--HBase应用开发
2024-10-05 06:57:07
HBase应用开发
HBase的定义
HBase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统。
- 适合于存储大表数据,可以达到实时级别。
- 利用Hadoop HDFS 作为其文件存储系统,提供实时的读写的数据库系统。
- 利用ZooKeeper作为协同服务。
HBase架构
HBase的适用场景
- 海量数据
- 高吞吐量
- 需要在海量数据中实现高效的随机读取
- 需要很好的性能伸缩能力
- 能够同时处理结构化和非结构化的数据
- 不需要完全拥有传统关系型数据库所具备的ACID特性
HBase应用开发流程
- 制定业务目标
- 准备开发环境
- 下载并导入样例工程
设计HBase表
设计原则:
查询数据唯一
数据均匀分布
查询性能优化
其他因素(region的提前划分,冷热Family的使用)
- 根据场景开发工程
- 编译并运行程序
- 查看结果与调试程序
HBase表设计-总体原则
设计目标:提高吞吐量
设计原则:预分region,是region分布均匀,提高并发
实现方法:Rowkey范围和分布已知,建议预分region
设计目标:提高写入性能
设计原则:避免过多的热点region
设计方法:根据应用场景,可以考虑将时间因素引入Rowkey
设计目标:提高查询性能
设计原则:数据连续存储,频繁访问的数据存储一个地方,数据连续存储,离散度,信息冗余。
实现方法:同时读取的数据存放在同一行、cell,使用二级索引
HBase表设计-设计内容
设计内容通过不同维度,可分为:
Table设计(表粒度的设计)
- 建表方法
- 预分region
- Family属性
- 系统并发能力、数据清洗能力
RowKey设计
- 原则:需要同时访问的数据,RowKey尽量连续
- 访问效率:分散写,连续读
- 属性内容:常用的查询场景属性
- 属性值顺序:枚举,访问权重
- 时间属性:循环Key+TTL,周期建表
- 二级索引
- 折中法
- 冗余法
Family设计
可枚举数量少扩展性弱的属性作为Family
Qualifier设计
不可枚举、数量多且扩展性强的属性作为Qualifier
原则:同时访问的数据存放到同一个Cell,列名尽量简短
HBase常用接口
create()
put()
get()
getScanner(Scan scan)
、、、
创建Configuration实例以及Kerberos安全认证
HBaseConfiguration方法
创建表
create Table方法
写入数据
put方法
读取一行数据
get方法
读取多行数据
scan方法
HBase的开发
. list_namespace:查询所有命名空间
hbase(main)::> list_namespace
NAMESPACE
default
hbase . list_namespace_tables : 查询指定命名空间的表
hbase(main)::> list_namespace_tables 'hbase'
TABLE
meta
namespace . create_namespace : 创建指定的命名空间
hbase(main)::> create_namespace 'myns'
hbase(main)::> list_namespace
NAMESPACE
default
hbase
myns . describe_namespace : 查询指定命名空间的结构
hbase(main)::> describe_namespace 'myns'
DESCRIPTION
{NAME => 'myns'} . alter_namespace :修改命名空间的结构
hbase(main)::> alter_namespace 'myns', {METHOD => 'set', 'name' => 'eRRRchou'} hbase(main)::> describe_namespace 'myns'
DESCRIPTION
{NAME => 'myns', name => 'eRRRchou'}
修改命名空间的结构=>删除name
hbase(main)::> alter_namespace 'myns', {METHOD => 'unset', NAME => 'name'}
hbase(main)::> describe_namespace 'myns' . 删除命名空间
hbase(main)::> drop_namespace 'myns' hbase(main)::> list_namespace
NAMESPACE
default
hbase . 利用新添加的命名空间建表
hbase(main)::> create 'myns:t1', 'f1', 'f2'
DDL
. 查询所有表
hbase(main)::> list
TABLE
HelloHbase
kylin_metadata
myns:t1
row(s) in 0.0140 seconds => ["HelloHbase", "kylin_metadata", "myns:t1"] . describe : 查询表结构
hbase(main)::> describe 'myns:t1' {NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '', IN_MEMORY => 'false', KEEP
_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMP
RESSION => 'NONE', MIN_VERSIONS => '', BLOCKCACHE => 'true', BLOCKSIZE => '
', REPLICATION_SCOPE => ''}
{NAME => 'f2', BLOOMFILTER => 'ROW', VERSIONS => '', IN_MEMORY => 'false', KEEP
_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMP
RESSION => 'NONE', MIN_VERSIONS => '', BLOCKCACHE => 'true', BLOCKSIZE => '
', REPLICATION_SCOPE => ''} . 创建分片表
hbase(main)::> create 'myns:t2', 'f1', SPLITS => ['', '', '', ''] . 修改表,添加修改列簇信息
hbase(main)::> alter 'myns:t1', {NAME=>'info1'}
hbase(main)::> describe 'myns:t1' . 删除列簇
hbase(main)::> alter 'myns:t1', {'delete' => 'info1'}
hbase(main)::> describe 'myns:t1' . 删除表
hbase(main)::> disable 'myns:t1'
hbase(main)::> drop 'myns:t1'
DML
用到的表创建语句:
hbase(main)::> create 'myns:user_info','base_info','extra_info' . 插入数据(put命令,不能一次性插入多条)
hbase(main)::> put 'myns:user_info','','base_info:username','张三' . scan扫描
hbase(main)::> scan 'myns:user_info' . 通过指定版本查询
hbase(main)::> scan 'myns:user_info', {RAW => true, VERSIONS => }
hbase(main)::> scan 'myns:user_info', {RAW => true, VERSIONS => } . 查询指定列的数据
hbase(main)::> scan 'myns:user_info',{COLUMNS => 'base_info:username'} . 分页查询
hbase(main)::> scan 'myns:user_info', {COLUMNS => ['base_info:username'], LIMIT => , STARTROW => ''} . get查询
hbase(main)::> get 'myns:user_info','','base_info:username'
hbase(main)::> put 'myns:user_info','','base_info:love','basketball'
hbase(main)::> get 'myns:user_info','' . 根据时间戳查询 是一个范围,包头不包尾
hbase(main)::> get 'myns:user_info','', {'TIMERANGE' => [, ]} . hbase排序
插入到hbase中去的数据,hbase会自动排序存储:
排序规则: 首先看行键,然后看列族名,然后看列(key)名; 按字典顺序 . 更新数据
hbase(main)::> put 'myns:user_info', '', 'base_info:name', 'rock'
hbase(main)::> put 'myns:user_info', '', 'base_info:name', 'eRRRchou' . incr计数器
hbase(main)::> incr 'myns:user_info', '', 'base_info:age3' . 删除
hbase(main)::> delete 'myns:user_info', '', 'base_info:age3' . 删除一行
hbase(main)::> deleteall 'myns:user_info','' . 删除一个版本
hbase(main)::> delete 'myns:user_info','','extra_info:feature', TIMESTAMP=> . 删除一个表
hbase(main)::> disable 'myns:user_info'
hbase(main)::> drop 'myns:user_info' . 判断表是否存在
hbase(main)::> exists 'myns:user_info' . 表生效和失效
hbase(main)::> enable 'myns:user_info'
hbase(main)::> disable 'myns:user_info' . 统计表行数
hbase(main)::> count 'myns:user_info' . 清空表数据
hbase(main)::> truncate 'myns:user_info'
更多学习:https://www.csdn.net/gather_2f/MtTaEgzsMzI2Ni1ibG9n.html
最新文章
- Redis 简单搭建
- Factstone Benchmark
- Redis安全访问
- python format
- Yii 中的createUrl和redirectUrl
- 从0,1,2...n中统计0,1,2...9各出现了多少次【SWUN1597】
- lightoj 1020 (博弈)
- 浏览器中输入URL到返回页面的全过程
- Springmvc异步上传文件
- iOS根据域名获取ip地址
- python 题库1
- Django的ORM那些相关操作
- Lending Club—构建贷款违约预测模型
- SpringMVC整合Mybatis的流程
- SpringBoot整合多数据源实现
- [LeetCode] Reaching Points 到达指定点
- 记一次php脚本memory exhausted
- SVM的两个参数 C 和 gamma
- 1083. List Grades (25)-简单的排序
- java面试⑥框架部分