1.文档编写目的
昨天我们简单介绍了一下Apache Phoenix,请参考Cloudera Labs中的Phoenix。今天我们主要讲述如何在CDH中安装配置Phoenix,并会做一些使用示例。
- 内容概述
1.安装及配置Phoenix
2.Phoenix的基本操作
3.使用Phoenix bulkload数据到HBase
4.使用Phoenix从HBase中导出数据到HDFS
- 测试环境
1.CDH5.11.2
2.RedHat7.2
3.Phoenix4.7.0
- 前置条件
1.CDH集群正常
2.HBase服务已经安装并正常运行
3.测试csv数据已准备
4.Redhat7中的httpd服务已安装并使用正常
2.在CDH集群中安装Phoenix
1.到Cloudera官网下载Phoenix的Parcel,注意选择与操作系统匹配的版本,因为本次测试使用的是Redhat7,所以选择后缀名为el7的文件。下载地址为:
具体需要下载的三个文件地址为:
2.将下载好的文件发布到httpd服务,可以用浏览器打开页面进行测试。
3.从Cloudera Manager点击“Parcel”进入Parcel管理页面
点击“配置”,输入Phoenix的Parcel包http地址。
点击“保存更改“回到Parcel管理页面,发现CM已发现Phoenix的Parcel。
点击“下载”->“分配”->“**”
4.回到CM主页,发现HBase服务需要部署客户端配置以及重启
重启HBase服务
安装完成。
3.如何在CDH集群中使用Phoenix
3.1Phoenix的基本操作
进入Phoenix的脚本命令目录
使用Phoenix登录HBase
需要指定Zookeeper
创建一张测试表
注意:建表必须指定主键。
在hbase shell中进行检查
插入一行数据。注意:Phoenix中没有insert语法,用upsert代替。参考:http://phoenix.apache.org/language/index.html
在hbase shell中进行检查
删除这行数据,delete测试
在hbase shell中进行检查
更新数据测试,注意Phoenix中没有update语法,用upsert代替。插入多条数据需要执行多条upsert语句,没办法将所有的数据都写到一个“values”后面。
在hbase shell中进行检查
批量更新测试,创建另外一张表hbase_test1,表结构与hbase_test一样,并插入五条,有两条是hbase_test中没有的(主键为4,5),有一条与hbase_test中的数据不一样(主键为1),有两条是完全一样(主键为2,3)。
批量更新,我们用hbase_test1中的数据去更新hbase_test。
批量更新发现对于已有的数据,如果值不一样,会覆盖,对于相同的数据会保持不变,对于没有的数据会直接作为新的数据插入。
3.2使用Phoenix bulkload数据到HBase
准备需要批量导入的测试数据,这里使用TPC_DS的item表数据。
因为Phoenix的bulkload只能导入csv,所以我们先把该数据的分隔符修改为逗号,并且后缀名改为.csv
上传该文件到HDFS
通过Phoenix创建item表,注意为了方便阅读,只创建了4个字段
执行bulkload命令导入数据
在Phoenix中查询该表
在hbase shell中查询该表
入库条数检查
条数相等,全部入库成功。
3.3使用Phoenix从HBase中导出数据到HDFS
Phoenix还提供了使用MapReduce导出数据到HDFS的功能,以pig的脚本执行。首先准备pig脚本。
执行该脚本
导出成功后检查HDFS中的数据
检查条数为10200与原始数据一致,全部导出成功。
4.总结
- 使用Cloudera提供的Phoenix Parcel,可以很方便的安装Phoenix。
- 使用Phoenix可以对HBase进行建表,删除,更新等操作,都是以大家熟悉的SQL方式操作。
- Phoenix提供了批量导入/导出数据的方式。批量导入只支持csv格式,分隔符为逗号。
- Phoenix中的SQL操作,可以马上同步到HBase,通过hbase shell检查都成功。
- 目前Cloudera官方提供的Phoenix版本较旧,为4.7.0,社区最新版本为4.11.0
- Phoenix提供的SQL语法较为简陋,没有insert/update,一律用upsert代替。
- 使用upsert插入数据时,只能一条一条插入,没法将全部字段值写到一个“values”后面。