CDH5.11整合phoenix4.7

一、环境准备

1.CDH环境

LinuxOSCentOS6.7
Hadoop2.6.0+cdh5.11.1+2400
Zookeeper3.4.5+cdh5.11.1+111
Hive1.1.0+cdh5.11.1+1041
HBase1.2.0+cdh5.11.1+319

2.素材获取

    进入Cloudera官网下载Phoenix的Parcel:

http://archive.cloudera.com/cloudera-labs/phoenix/parcels/latest/

二、安装Phoenix

1.安装httpd

    安装httpd服务以便后续可以发布Phoenix文件

yum install -y httpd*

2.发布parcel

    建立Phoenix目录,并拷入之前获取的文件(/var/www/html为httpd默认发布路径)

#建立Phoenix目录
mkdir /var/www/html/Phoenix

#拷贝文件到Phoenix目录
cp CLABS_PHOENIX-4.7.0-1.clabs_phoenix1.3.0.p0.000-el6.parcel /var/www/html/Phoenix/
cp CLABS_PHOENIX-4.7.0-1.clabs_phoenix1.3.0.p0.000-el6.parcel.sha1 /var/www/html/Phoenix/
cp manifest.json /var/www/html/Phoenix

#更名
mv CLABS_PHOENIX-4.7.0-1.clabs_phoenix1.3.0.p0.000-el6.parcel.sha1 CLABS_PHOENIX-4.7.0-1.clabs_phoenix1.3.0.p0.000-el6.parcel.sha

    拷入文件并更名后文件信息

    拷贝入文件后通过网页能够访问

http://47.95.246.68/phoenix/

3.CM-parcel部署

    1> 进入CM主页点击《主机 -> Parcel》进入Parcel管理页面

    2> 在Parcel管理页面点击《配置》进入Parcel配置

    3> 添加Phoenix发布的http地址并保存

http://47.95.246.68/phoenix/

    4> 返回发现CM已经识别Phoenix的远程Parcel

    5> 依次点击《下载 -> 分配 -> 激活》完成Parcel布置

4.HBase配置更新

    1> 返回CM主页面发现HBase需要重启并更新配置项

    2> 更新过期配置

    3> 重启过时服务

三、一般使用

1.启动Phoenix

    1> 进入Phoenix的bin目录

cd /opt/cloudera/parcels/CLABS_PHOENIX/bin

    2> 登陆Phoenix客户端(需要指定Zookeeper)

./phoenix-sqlline.py cdh01:2181:/hbase

    3> 查看表信息

2.create

    Phoenix创建测试表

#设置单列为主键
CREATE TABLE tmp_staff
 (
  hrid         varchar not null primary key,
  parentid     bigint,
  departmentid varchar
 );

#也可设置多列为联合主键
(当设置联合主键时,Phoenix会把定义的列拼起来作为Hbase的Rowkey)
CREATE TABLE test_staff
 (
  hrid         varchar,
  parentid     bigint,
  departmentid varchar
CONSTRAINT my_pk PRIMARY KEY (departmentid, hrid));

    Hbase查看测试表

3.alter

    Phoenix修改测试表

(特别说明:Phoenix的索引分为可变索引和不可变索引。它们通过对应主表IMMUTABLE_ROWS参数来设定。不可变索引的存储方式是write once, append only,主表数据变化时索引表会追加一条新索引,使用场景十分有限。可变索引的存储方式是write once, multiple edit。主表数据变化时索引表会更新对应索引条目。)

#新增列
ALTER TABLE tmp_table ADD departmentid varcher;
#删除列
ALTER TABLE tmp_table DROP COLUMN 0.departmentid;
#使得表支持可变索引
ALTER TABLE tmp_table SET IMMUTABLE_ROWS = true;

    Phoenix修改索引

(特别说明:Phoenix不保证完整的事务,所以可能出现索引表与主表不一致的情况。若想自己同步可以使用rebuild命令进行索引重建。同时也要注意,索引重建过程有可能bring down整个hbase集群)

#禁用索引
ALTER INDEX idx_tmp_table ON 0.departmentid DISABLE
#重建索引
ALTER INDEX IF EXISTS idx_tmp_table ON server_metrics REBUILD

4.upsert

    1> Phoenix测试表插入数据(Phoenix中没有INSERT语法,用UPSERT VALUES、UPSERT SELECT代替)

#插入数据
upsert into tmp_staff values('00021850',1915,'inthotel');
#查询
select * from tmp_staff;

    Hbase查看测试表数据


    2> Phoenix测试表更新数据(Phoenix中没有update语法,用UPSERT VALUES、UPSERT SELECT代替)

#更新数据
upsert into tmp_staff values('00021850',1915,'xxxxx');
#查询
select * from tmp_staff;

5.delete

    Phoenix测试表删除数据

#删除数据
delete from tmp_staff where hrid='00021850';
#查询
select * from tmp_staff;

    Hbase查看测试表数据

四、数据导入导出

1.bulkload

    对于分布在集群上的高吞吐量的加载,可以使用MapReduce加载器。这个加载器首先将所有数据转换为HFiles,然后在HFile创建完成后直接将创建的HFiles提供给HBase。相对于走API导数据方式,速度更快负载更小。可使用的方法有:

org.apache.phoenix.mapreduce.CsvBulkLoadTool
org.apache.phoenix.mapreduce.JsonBulkLoadTool

    1> 准备CSV文件

#文件上传至HDFS
hadoop fs -put tmp_staff.csv /test

    2> 执行导入命令

HADOOP_CLASSPATH=/opt/cloudera/parcels/CDH/lib/hbase/hbase-protocol-1.2.0-cdh5.11.1.jar:/opt/cloudera/parcels/CDH/lib/hbase/conf hadoop jar /opt/cloudera/parcels/CLABS_PHOENIX/lib/phoenix/phoenix-4.7.0-clabs-phoenix1.3.0-client.jar org.apache.phoenix.mapreduce.CsvBulkLoadTool -t tmp_staff -i /test/tmp_staff.csv

    3> Phoenix中查看数据

    4> HBase中查看数据

2.pig export

    1> 准备导出所需控制文件

REGISTER /opt/cloudera/parcels/CLABS_PHOENIX/lib/phoenix/phoenix-4.7.0-clabs-phoenix1.3.0-client.jar;
rows = load 'hbase://query/SELECT * FROM TMP_STAFF' USING org.apache.phoenix.pig.PhoenixHBaseLoader('cdh01:2181');
STORE rows INTO 'tmp_staff_export.csv' USING PigStorage(',');

    2> 执行导出命令

pig -x mapreduce tmp_staff_export.pig

    3> 导出开始

    4> 导出任务成功

五、使用简述

1.优势概述

    Phoenix作为应用层与HBase之间的中间件,以下特性使它在大数据量的简单查询场景有着独有的优势

1. 自动编译SQL为原生HBase可并行执行的scan
2. 多种二级索引支持(global、local、cover、func)
3. coprocessor在server端执行,减小服务与客户端传输开销
4. 下推where过滤条件到server端的scan filter上
5. 自动收集统计信息并利用它来优化查询计划(5.x版本将支持CBO)
6. skip scan利用了HBase的SEEK_NEXT_USING_HINT显著提高扫描速度
7. Salting通过对RowKey前添加Hash对表预分region,提升读写并消除热数据
8. 除了HBase的行级事务语义之外,与Tephra集成实现了跨行和跨表事务支持。

2.访问方式

    一般可以使用以下三种方式访问Phoenix

1. 命令行工具phoenix-sqlline.py等
2. JDBC API
3. SQuirrel

3.性能对比

    A:数据是5个窄列。regionServer数量:4台 (HBase堆:10GB,处理器:6核@ 3.3GHz Xeon)

#10M and 100M rows
select count(1) from table 

    B:数据是3个窄列。region server数:1 (HBase堆:2GB,处理器:2核@ 3.3GHz Xeon)

#1M and 5M rows
select count(1) from table 

转载于:https://my.oschina.net/puwenchao/blog/1928219

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值