HBase进阶

一.HBase REST API

使用REST API操作HBase

  • 1.start/stop rest service
./hbase-daemon.sh start rest -p 9081
./hbase-daemon.sh stop rest -p 9081

示例

http://localhost:9081/version
http://localhost:9081/<table_name>/schema
http://localhost:9081/<table_name>/<row_key>

在这里插入图片描述

二.Phoenix概述

Phoenix简介

  • 构建在HBase上的SQL层
  • 使用标准SQL在HBase中管理数据
  • 使用JDBC来创建表,插入数据、对HBase数据进行查询
  • Phoenix JDBC Driver容易嵌入到支持JDBC的程序中

Phoenix无法代替RDBMS

  • 缺乏完整约束,很多领域尚不成熟

Phoenix使HBase更易用

Phoenix应用场景

  • 1)Phoenix适合场景
  • 2)快速而容易地构建基于HBase的应用程序
  • 3)需要极大的规模、性能和并发性的SQL应用程序
  • 4)在转换到Hadoop时重用已有的SQL技能
  • 5)BI工具(对SQL支持较好)

Phoenix不适合场景

  • 1)涉及大型Join操作或高级SQL特性的复杂SQL查询
  • 2)Full-Table Scans
  • 3)ETL jobs
  • 4)Application Drivers/Interface

Phoenix支持类SQL语法

Phoenix支持的关键字类型

Standard SQL Data Types	--标准SQL 数据类型
SELECT, UPSERT, DELETE	--UPSERT与标准SQL不同 更新和插入都是一样的
JOINs: Inner and Outer
Subqueries
Secondary Indexes
GROUP BY, ORDER BY, HAVING
AVG, COUNT, MIN, MAX, SUM
Primary Keys, Constraints
CASE, COALESCE
VIEWs
PERCENT_RANK, LAST|FIRST VALUE
UNION ALL
Cross Joins
Windowing Functions		--窗口函数
Transactions		--事务
Authorization
Replication Management

Phoenix操作HBase

  • 1)安装Phoenix
  • 2)拷贝相关Jar包到RegionServer的HBase的lib目录
cp phoenix-4.14.0-cdh5.14.2-server.jar /opt/install/hbase/lib/
  • 3)进入Phoenix的bin目录启动
./sqlline.py  localhost   -- 其中localhost为Zookeeper所在节点的主机名
/opt/install/phoenix/bin/sqlline.py

命令行操作

!tables  	-- 查看所有表,类似于beeline操作
CREATE TABLE company (COMPANY_ID INTEGER PRIMARY KEY, NAME VARCHAR(225)); 	 --创建表操作
UPSERT INTO company VALUES(1, 'Microsoft');  	-- 插入数据不支持插入多条数据
SELECT * FROM Company;	--查看数据

三.Hive与HBase集成使用场景

将HBase作为Hive数据源,让HBase支持类SQL操作
将Hive ETL数据存入HBase,便于快速查询
构建低延时的数据仓库,利用HBase快速读写能力,实现数据实时查询

在这里插入图片描述

1.Hive与HBase集成原理

通过两者本身对外的API接口互相通信完成

  • 由Hive的lib目录中hive-hbase-handler-*.jar工具类实现

HBaseStorageHandler

  • 实现Hive与HBase集成的类
  • 对HiveStorageHandler接口的实现

HBase作为Hive的数据源

  • 创建Hive表映射HBase原有的表,实现HBase表更新后,Hive能获取到更新后的结果

Hive ETL结果存入HBase

  • 创建Hive表映射HBase表,可以实现将Hive ETL后的结果被HBase访问

练习:

  • 实现Hive中创建表hive_hbase_emp_table关联HBase
  • 在Hive中插入数据,通过HBase查询
  • 在HBase中插入数据,通过Hive查询
-- hbase表
CREATE TABLE emp(emp_id INTEGER PRIMARY KEY,emp_name varchar(20),age INTEGER);
UPSERT INTO emp VALUES (1,'zhangsan',20);
UPSERT INTO emp VALUES (2,'ls',21);
UPSERT INTO emp VALUES (3,'ww',22);
select * from emp;
-- hive
create external table emp(
emp_id int,
emp_name string,
age int
)
ROW FORMAT SERDE  'org.apache.hadoop.hive.hbase.HBaseSerDe' 
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES 
(
"hbase.columns.mapping"=":key,0:emp_name,0:age"
)
tblproperties("hbase.table.name"="EMP");
-- hive 插入 hbase 查询
insert into emp values(1,'zs',21),(2,'zs',22),(3,'ls',23),(4,'ww',24),(5,'zl',25);
scan 'EMP'
-- hbase 插入 hive 查询
put 'EMP', '1001','0:age','20'
put 'EMP' ,'1001','0:emp_name','test01'
select * from emp;

三.Hbase常用命令

1.名称空间(NameSpace)

NameSpace:一种易于表管理的机制:可以创建、删除或更改NameSpace

#创建namespace语法
create_namespace '名称'
#列出所有namespace
list_namespace
#namespace下创建表语法
create 'namespace名字:表名', '列族名' 
#删除namespace
drop_namespace '名称' 
#更改namespace属性语法
alter_namespace 'namespace名称', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'} 
#删除属性
alter_namespace 'test01',{METHOD=>"unset",NAME=>"author"}

2.安全权限(Security with GRANT)

使用grant命令进行授权管理:如读、写、执行和管理等

我们可以为用户赋予RWXCA权限中的一个或多个

R -  read privilege	读权限
W - write privilege	写权限
C - create privilege	创建权限	
A - admin privilege	管理权限
X - execute		执行权限
# 示例:给will用户赋予读写创建管理权限
grant 'will', 'RWCA', 'my_hbase_table' 

3.权限管理命令(revoke & user_permission)

  • 使用grant命令授权
语法:grant <user> <permissions> <table> [<column family> [<column:qualifier>]] 
示例:grant 'will', 'RWCA', 'my_hbase_table'

  • 使用revoke命令删除权限
语法:revoke <user> <table> [<column family> [<column:qualifier>]]
示例:revoke 'will', 'my_hbase_table'  
  • 使用user_permission查看用户对表所拥有的权限
语法:user_permission 'tablename'
示例:user_permission 'my_hbase_table'

四.Region管理

Region拆分

  • 当一个Region大到一定程度,会进行分裂(split)
  • HBase可以通过Region Split达到负载均衡

Region Split策略

  • 1)自动拆分
  • ConstantSizeRegionSplitPolicy
  • IncreasingToUpperBoundRegionSplitPolicy(默认)
  • 2)手动指定拆分点(或按代码预分割)

Region预拆分

  • 指定拆分算法linux命令行运行
hbase org.apache.hadoop.hbase.util.RegionSplitter my_split_table HexStringSplit -c 10 -f mycf
其中:my_split_table:我们指定要新建的表名。
HexStringSplit:指定的拆分点算法为HexStringSplit。
-c:要拆分的Region数量。
-f:要建立的列族名称。
  • 手动指定拆分点-hbase shell执行
#指定拆分点
create 'test_split2','mycf2',SPLITS=>['aaa','bbb','ccc','ddd','eee','fff']
#指定拆分文件 #splits文件中内容为aaa bbb ccc ddd eee fff (有换行)
create 'students','baseinfo',SPLITS_FILE => '/root/splits'

Region合并

  • 如果删除了大量数据,很多Region变小,这时候分成多个Region就很浪费,可以把Region合并起来,Region的合并不是为了性能考虑,主要是出于维护的目的

五.HBase Compaction - LSM

1.Log-Structured Merge (LSM)

  • 区别于传统数据库的更新现有数据
  • 使用类似日志结构合并(LSM)的方式
  • 只需要将值写到Log的末尾然后进行排序
  • 优点:插入和更新数据非常快
  • 缺点:占用更多空间
传统数据库LSM系统
特点直接更新现有数据将值写到Log末尾并合并
随机读写通过顺序读写提高性能
示例Hello my name is Bruce(Heather)Hello my name is Bruce Hello my name is Heather

2.HBase Compaction - 实现
在这里插入图片描述

Compaction分为Minor和Major两种

  • Minor Compaction:将小文件合并成更少的大型文件
  • Major Compaction:将一个HStore中的所有文件合并成一个文件

每次触发compact检查时,系统自动决定执行哪一种

  • 有三种情况会触发compact检查
  • 1)MemStore被刷写到磁盘
  • 2)执行shell命令compact、major_compact或调用相应API
  • 3)HBase后台线程周期性触发检查

3.HBase Compaction - Control

Minor一般由事件触发,Major一般由时间触发
相关控制

  • Minor(1.2.0-cdh5.14.2版本)
  • 1)hbase.hregion.memstore.flush.size 缓存阈值大小
  • 2)hbase.hstore.compaction.max :每次compact的HFile的最大数目,默认是10
  • 3)hbase.hstore.compaction.kv.max:compact时批量读取和写入KeyValue数据的数量,默认是10
  • Major Compaction
  • 1)hbase.hregion.majorcompaction 时间间隔

4.Flush和Compact操作

  • flush操作
flush 'tablename'
flush 'regionname'

  • compact操作
#compact一个表的所有regions
compact 't1'
#compact某个空闲的region
compact 'r1'
#compact一个region中的某个列族
compact 'r1', 'c1'
#compact一个表中的某个列族
compact 't1', 'c1'
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值