如何在CDH中使用Phoenix

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”后面。

参考:https://cloud.tencent.com/developer/article/1078068

你可能感兴趣的:(Phoenix)