一、Phoenix概述
Phoenix简介
- 构建在HBase上的SQL层
- 使用标准SQL在HBase中管理数据
- 使用JDBC来创建表,插入数据、对HBase数据进行查询
- Phoenix JDBC Driver容易嵌入到支持JDBC的程序中
- Phoenix使HBase更易用
Phoenix应用场景
Phoenix适合场景
- 快速而容易地构建基于HBase的应用程序
- 需要极大的规模、性能和并发性的SQL应用程序
- 在转换到Hadoop时重用已有的SQL技能
- BI工具(对SQL支持较好)
Phoenix不适合场景
- 涉及大型Join操作或高级SQL特性的复杂SQL查询
- Full-Table Scans
- ETL jobs
- Application Drivers/Interface
Phoenix安装
将安装包解压放入hbase的lib目录下
#root目录下创建software文件夹用于存放各种软件安装包,并进入software文件夹中
cd ~
mkdir software
cd software
#将安装包拖入文件夹中
#解压到opt目录下,这里随便选择,只要你能找到
tar -zxvf apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz -C /opt/
#进入到opt/apache-phoenix-4.14.0-cdh5.14.2-bin/目录下
cd /opt/apache-phoenix-4.14.0-cdh5.14.2-bin/
#复制phoenix-4.14.0-cdh5.14.2-server.jar包到hbase的lib目录下
cp phoenix-4.14.0-cdh5.14.2-server.jar /opt/soft/hbase120/lib/
#进入到apache-phoenix-4.14.0-cdh5.14.2-bin的bin目录下
cd /opt/apache-phoenix-4.14.0-cdh5.14.2-bin/bin
#启动服务
./sqlline.py
#如果不行,请重启hbase
用Phoenix创建表,并插入数据,查询数据
#创建表
CREATE TABLE stock(COMPANY_ID INTEGER PRIMARY KEY,PRICE DECIMAL(10,2));
#插入数据
UPSERT INTO stock VALUES(1,78.5);
UPSERT INTO stock VALUES(2,46.53);
UPSERT INTO stock VALUES(3,132.53);
UPSERT INTO stock VALUES(4,32);
UPSERT INTO stock VALUES(5,87.9);
#查询数据
select * from stock;
二、Hive集成HBase
使用场景
-
将HBase作为Hive数据源
让HBase支持类SQL操作 -
将Hive ETL数据存入HBase
便于快速查询 -
构建低延时的数据仓库
利用HBase快速读写能力
实现数据实时查询
Hive与HBase集成原理
- 通过两者本身对外的API接口互相通信完成
- 由Hive的lib目录中hive-hbase-handler-*.jar工具类实现
- HBaseStorageHandler
- 实现Hive与HBase集成的类
- 对HiveStorageHandler接口的实现
Hive与hbase集成
案例演示
#在hbase中创建学生表
#创建学生表
create 'student','info'
#向学生表里添加数据
put 'student','1001','info:name','zhangsan'
put 'student','1001','info:age','20'
put 'student','1002','info:name','lisi'
put 'student','1002','info:age','21'
put 'student','1003','info:name','wangwu'
put 'student','1003','info:age','22'
put 'student','1004','info:name','lyq'
put 'student','1004','info:age','23'
#用hive创建外部表,连接hbase的student表
create external table student(
emp_id string,
emp_name string,
emp_age string
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties
("hbase.columns.mapping"=":key,info:name,info:age")
tblproperties("hbase.table.name"="student");
在hive中创建完表之后,用查询语句查询也是可以的
用hive创建的连接hbase的表,也可以插入数据
#在hive中插入数据
insert into student values('1005','cnl','27');
#在hbase中查询数据是否增加
scan 'student';
三、命名空间、安全权限
命名空间
NameSpace:一种易于表管理的机制
可以创建、删除或更改NameSpace
#创建namespace
create_namespace 'my_ns’
#create my_table in my_ns namespace
create 'my_ns:my_table', 'fam'
#删除namespace
drop_namespace 'my_ns’
#更改namespace
alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
安全权限
使用grant命令进行授权管理
如读、写、执行和管理等
我们可以为用户赋予RWXCA权限中的一个或多个
R - read privilege 读权限
W - write privilege 写权限
C - create privilege 创建权限
A - admin privilege 管理权限
X - execute 执行权限
语法:
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'