GreenPlum 调研笔记
PXF
PXF 是 Greenplum 自带的外表连接插件,可以用来连接包括:Hive、HDFS、HBase、S3、JDBC 等外部数据源。
PXF 运行在每个 Segment 主机上,可以直接连接外部数据源获取数据,具有:谓词下推、列式查询等特性。
PXF 基于JAVA,使用时需要在所有Greenplum集群上安装jdk,其安装目录位于$GPHOME/pxf。
配置文件
Conf配置目录
当用户初始化PXF时,初始化进程会在 $PXF_CONF 目录下创建用户配置目录。
用户配置目录以 /usr/local/greenplum-db/pxf 下的文件为模板,用户应该在 $PXF_CONF 目录中修改配置文件。
用户需要关注 $PXF_CONF/conf 目录中的三个配置文件:
- pxf-env.sh:定义 PXF 使用的环境变量
- pxf-log4j.properties:日志文件
- pxf-profiles.xml:自定义profiles
1 2 3 4 5 6 7
| profiles 配置是用来定义:数据格式、依赖jar等内容的,可以认为一个profiles 是 pxf 和外部数据源之间的连接器。
通常一个数据源有多种连接器,PXF 已经预定义了一些 profiles 配置(参考$GPHOME/pxf/conf/pxf-profiles-default.xml文件)
Hadoop作为外部数据源时,数据格式和数据源(HIVE、HBASE、HDFS)对应的 profiles 参考:
[Connectors, Data Formats, and Profiles](https://gpdb.docs.pivotal.io/6-1/pxf/access_hdfs.html)
|
数据源配置
PXF 中将外部数据源定义为Server,用户在创建外部表时可以指定不同的Server,当不指定Server时从默认数据源(default server)拉取数据。
Server的配置存放在 $PXF_CONF/servers/{server_name}/ 目录中,每一个Server表示一种外部数据源。
Server的配置文件取决于类型,可能包含多种配置文件。PXF 还允许不同Greenplum用户连接数据源时,使用不同的配置用户可以在 $PXF_CONF/servers/{server_name}/ 中创建 {greenplum_user_name}-user.xml 文件,根据需要编辑该用户使用参数(比如,身份信息和其他配置)。
1 2 3 4 5 6 7 8 9 10 11 12 13
|
<configuration> <property> <name>jdbc.user</name> <value>pguser1</value> </property> <property> <name>jdbc.password</name> <value>changeme</value> </property> </configuration>
|
建表语句
1 2 3 4 5 6 7 8 9 10 11
|
CREATE [WRITABLE] EXTERNAL TABLE <table_name> ( <column_name> <data_type> [, ...] | LIKE <other_table> ) LOCATION('pxf://<path-to-data>?PROFILE=<profile_name>[&SERVER=<server_name>][&<custom-option>=<value>[...]]') FORMAT '[TEXT|CSV|CUSTOM]' (<formatting-properties>);
|
QuickStart
以下Demo展示了Greenplum访问HDFS上的Text文本数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| # 所有节点指定PXF配置目录 echo "export PXF_CONF=/home/gpadmin/conf/pxf_conf" >> ~/.bashrc source ~/.bashrc
# 在整个集群中初始化pxf服务,pxf会在 $PXF_CONF 指定的路径下生成一系列配置文件 $GPHOME/pxf/bin/pxf cluster init
# Copy Hadoop环境的以下文件到$PXF_CONF/servers/default目录 # core-site.xml # hdfs-site.xml # mapred-site.xml # yarn-site.xml
# 当Hadoop使用Kerberos认证时,执行以下操作 # # 1. 安装kerberos客户端,yum -y install krb5-libs krb5-workstation # 2. 配置krb5.conf # 3. copy keytab文件到所有segment机器 # 4. 修改$PXF_CONF/conf/pxf-env.sh中的以下几个配置项: # PXF_KEYTAB: 使用的keytab # PXF_PRINCIPAL: 认证的账号 # PXF_USER_IMPERSONATION:建议改为false
# 执行以下命令同步配置到所有segment节点 # $GPHOME/pxf/bin/pxf cluster sync $GPHOME/pxf/bin/pxf cluster start
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
CREATE ROLE idata LOGIN REPLICATION CREATEDB CREATEEXTTABLE PASSWORD 'idata';
CREATE DATABASE idata; CREATE EXTENSION pxf;
GRANT INSERT ON PROTOCOL pxf TO idata; GRANT SELECT ON PROTOCOL pxf TO idata;
CREATE EXTERNAL TABLE pxf_hdfs_textsimple(location text, month text, num_orders int, total_sales float8) LOCATION ('pxf://tmp/pxf_examples/pxf_hdfs_simple.txt?&PROFILE=hdfs:text')FORMAT 'TEXT' (delimiter=E',');
|
需要注意:当使用Kerberos认证的Hadoop时,只能使用default作为server配置
参考
Introduction to PXF
Accessing Hadoop with PXF:读写不同格式的HDFS文件、读写hive表、HBase表
Configuring PXF for Secure HDFS
Troubleshooting