GreenPlum6使用PXF进行连接HDFS、HIVE
最近我们正在测试GP6.7的性能,尝试着使用PXF连接HDFS进行外部表获取,提供一个GreenPlum中文社区 PXF中文文档
环境配置
配置环境:GreenPlum 6.7 ; PXF 5.11 ; CDH 6.1 (hadoop 3.*,hive 2.*)
初始环境
由于我们拿到的手的服务上是已经安装好的GreenPlum6.7和PXF5.11,所以我们只需要配置PXF的环境即可,GP6服务器上需要安装hdfs和hive的客户端 参考这位大佬的安装步骤
准备文件
我们需要拷贝正式环境上CDH的的配置文件,CDH配置文件默认地址/etc/hive、/etc/hadoop
scp /ect/hive/conf/core-size.xml GP6_10://home/data/greenplum-pxf/servers/ #移至GP-PXF主节点上
scp /ect/hive/conf/hdfs-size.xml GP6_10://home/data/greenplum-pxf/servers/ #移至GP-PXF主节点上
scp /ect/hive/conf/hive-size.xml GP6_10://home/data/greenplum-pxf/servers/ #移至GP-PXF主节点上
scp /ect/hive/conf/mapred-size.xml GP6_10://home/data/greenplum-pxf/servers/ #移至GP-PXF主节点上
配置服务器文件
因为使用的scp进行文件移动的,所以在GP6的服务器上文件归属者是root用户,故我们需要在GP6上使用gpadmin用户进行文件拷贝到PXF服务节点下
ssh GP6_10 #链接gp6主节点
mkdir -p /home/data/greenplum-pxf/servers/cdh-prod #创建cdh服务器配置文件
cd
cp /home/data/greenplum-pxf/servers/*.xml /cdh-prod/ #拷贝xml文件至PXF服务节点下
rm /home/data/greenplum-pxf/servers/*.xml #删除root用户下的hadoop配置文件
修改PXF配置文件(pxf-env.sh)
由于配置PXF用户模拟默认打开的,所以我们需先关闭一下
vim pxf-env.sh
#修改以下语句,将用户模拟关闭
export PXF_USER_IMPERSONATION=false
配置环境变量
vim /etc/profit
#GP6安装目录
export GP_HOME=/usr/local/greenplum-db-6.7.0
export PATH=$PATH:${GP_HOME}/bin
#PXF安装目录
export PXF_HOME=/usr/local/greenplum-db-6.7.0/pxf
export PATH=$PATH:${PXF_HOME}
#PXF配置文件
export PXF_CONF=/home/data/greenplum-pxf
export PATH=$PATH:${PXF_CONF}
PXF服务器配置文件分发、启动
切记运行PXF命令时须使用gpadmin用户
#pxf配置文件分发
$PXF_HOME/bin/pxf cluster sync
#查看pxf服务状态
$PXF_HOME/bin/pxf cluster status
#启动pxf服务状态
$PXF_HOME/bin/pxf cluster start
#停止pxf服务状态
$PXF_HOME/bin/pxf cluster stop
建表、查询、测试
建表语句就是hive的建表语句呗,各位大佬可以参考官方文档 读取Hive表数据
hive端,我使用的hue进行建表和插入数据的
#创建表
hive> CREATE TABLE sales_info (
location string
, month string
,number_of_orders int
, total_sales double
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS textfile;
#插入数据
hive> insert into sales_info values('Prague','Jan',101,4875.33);
hive> insert into sales_info values('Rome','Mar',87,1557.39);
hive> insert into sales_info values('Bangalore','May',317,8936.99);
hive> insert into sales_info values('Beijing','Jul',411,11600.67);
#查看数据
hive> SELECT * FROM sales_info;
注意:
STORED AS textfile 子句指示Hive以 Textfile (默认) 格式创建表。 Hive Textfile格式支持逗号、制表符和空格分隔的值, 以及用JSON表示的数据。
DELIMITED FIELDS TERMINATED BY 子句定义数据记录(行)中的字段分隔符。 sales_info 表字段分隔符是逗号(,)。
GP6客户端
#创建外部表
CREATE EXTERNAL TABLE salesinfo_hiveprofile(
location text
, month text
, num_orders int
, total_sales float8
) LOCATION ('pxf://default.sales_info?PROFILE=Hive&SERVER=cdh-prod')
FORMAT 'custom' (FORMATTER='pxfwritable_import');
#查询外部表
select * from salesinfo_hiveprofile;