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

最新文章

  1. Redis 简单搭建
  2. Factstone Benchmark
  3. Redis安全访问
  4. python format
  5. Yii 中的createUrl和redirectUrl
  6. 从0,1,2...n中统计0,1,2...9各出现了多少次【SWUN1597】
  7. lightoj 1020 (博弈)
  8. 浏览器中输入URL到返回页面的全过程
  9. Springmvc异步上传文件
  10. iOS根据域名获取ip地址
  11. python 题库1
  12. Django的ORM那些相关操作
  13. Lending Club—构建贷款违约预测模型
  14. SpringMVC整合Mybatis的流程
  15. SpringBoot整合多数据源实现
  16. [LeetCode] Reaching Points 到达指定点
  17. 记一次php脚本memory exhausted
  18. SVM的两个参数 C 和 gamma
  19. 1083. List Grades (25)-简单的排序
  20. java面试⑥框架部分

热门文章

  1. OpenGL入门1.6:坐标系统,3D箱子
  2. MySQL 中的索引
  3. C# 矢量图EMF 总结
  4. 个人博客如何开启 https
  5. 微信小程序简单个人信息表单页面
  6. Mixins and Python
  7. [20190524]浅谈模糊查询.txt
  8. 1.JavaCC安装与测试
  9. 16.Linux-LCD驱动(详解)【转】
  10. 201871010111-刘佳华《面向对象程序设计(java)》第6-7周学习总结