PXF简介及使用

PXF简介及使用

      • PXF
        • 简介
        • PXF
          • PXF 初始化
          • PXF 重置
          • gp开启pxf
          • 查看PXF集群状态
        • pxf JDBC配置
          • 注册jar依赖项
          • 谓语推断开启
        • 解决PXF内存问题
          • 开启debug模式
          • 关闭自动kill
          • 转储堆内存
          • tomcat选择
          • PXF JDBC连接器时区
          • PXF 元数据缓存
        • PXF 使用
          • 配置
          • 验证

PXF

简介

随着数据存储和云服务的增长,数据现在以多种格式驻留在许多不同的系统中。通常,数据按其位置和对数据执行的操作以及访问数据的频率进行分类:实时性(热),不频繁(热)或存档(冷)。

下图描述了一个数据源,该数据源跟踪了多年的月度销售额。实时操作数据存储在MySQL中。进行分析和商业智能操作的数据存储在Greenplum数据库中。很少访问的存档数据驻留在AWS S3中。

当外部系统中存在多个相关数据集时,通常更有效的方法是远程连接数据库进行查询,而不是将完整数据加载到磁盘中。如上所述Greenplum的平台扩展框架(PXF) ,一个Greenplum的扩展,提供平行,高通量数据访问和联邦查询处理,提供了这种能力。

借助PXF,您可以使用Greenplum和SQL查询这些异构数据源:

  • Hadoop, Hive, and HBase
  • Azure Blob Storage and Azure Data Lake
  • AWS S3
  • Minio
  • Google Cloud Storage
  • SQL databases including Apache Ignite, Hive, MySQL, ORACLE, Microsoft SQL Server, DB2, and PostgreSQL (via JDBC)

And these data formats:

  • Avro, AvroSequenceFile
  • JSON
  • ORC
  • Parquet
  • RCFile
  • SequenceFile
  • Text (plain, delimited, embedded line feeds)

PXF

PXF 初始化

一次性初始化将创建PXF服务Web应用程序,并生成PXF配置文件和模板。

PXF提供了两个可用于初始化的管理命令:

pxf cluster init -初始化Greenplum数据库集群中的所有PXF服务实例
pxf init -在当前Greenplum数据库主机上初始化PXF服务实例
PXF还提供了类似的reset命令,可用于重置PXF配置。
# 指定初始化目录
PXF_CONF=/usr/local/greenplum-pxf $GPHOME/pxf/bin/pxf cluster init
PXF 重置

所有Greenplum主机上重置PXF服务实例

 $GPHOME/pxf/bin/pxf cluster reset
gp开启pxf
> psql -d <database-name> -U gpadmin
> database-name=# CREATE EXTENSION pxf

GRANT SELECT ON PROTOCOL pxf TO bill;
GRANT INSERT ON PROTOCOL pxf TO 用户名;
查看PXF集群状态
$GPHOME/pxf/bin/pxf cluster status

pxf JDBC配置

注册jar依赖项

在master节点将jdbc jar包放入$PXF_CONF/lib/路径

cp jdbc_jar.jar $PXF_CONF/lib/

配置数据库连接信息

在master节点 $PXF_CONF/servers 目录下,已有一个default文件夹,将template下的jdbc-site.xml copy到下面。推荐在$PXF_CONF/servers目录下新建文件夹以适应多个数据源时的配置。

mkdir $PXF_CONF/servers/db_name
cp  $PXF_CONF/templates/jdbc-site.xml $PXF_CONF/servers/db_name

修改示列如下
<property>
    <name>jdbc.driver</name>
    <value>com.mysql.jdbc.Driver</value>
</property>
<property>
    <name>jdbc.url</name>
    <value>jdbc:mysql://xxxip:3306/schame</value>
</property>
<property>
    <name>jdbc.user</name>
    <value>用户</value>
</property>
<property>
    <name>jdbc.password</name>
    <value>密码</value>
</property>

启动

谓语推断开启

pxf谓语推断是在sql外部表sql执行时,能够下推查询条件,减少数据传输及加快查询性能。谓语推断默认开启。

SHOW gp_external_enable_filter_pushdown;
SET gp_external_enable_filter_pushdown TO 'on';

解决PXF内存问题

开启debug模式

在有错误调试时,可以打开debug。打印出更加详细的日志信息

#log4j.logger.org.greenplum.pxf=DEBUG

​ 错误:java.lang.OutOfMemoryError: Java heap space

​ 因为单个PXF代理(JVM)为段主机上的多个段提供服务,所F堆大小可能是限制运行时的因素。在并发工作负载和/或针对大文件的查询下,这一点将更加明显。您可能会遇到由于内存不足或Java垃圾收集器影响响应时间而导致查询挂起或失败的情况。要避免或纠正这些情况,可以尝试增加Java最大堆大小或减少Tomcat最大线程数,这取决于最适合您的系统配置的方式。您还可以选择将PXF配置为在检测到内存不足情况时执行特定的操作。

配置更新后使用pxf cluster sync 同步到其它服务器上去。配置更新后同步,同步之后再重启。

vi $PXF_CONF/conf/pxf-env.sh
关闭自动kill

如果要在OOM上配置(即关闭或重新打开)PXF服务器自动关闭功能pxf-env.sh``文件中找到PXF_OOM_KILL属性.如果该设置已被注释掉,请取消注释它,然后更新该值。例如,要关闭此行为,请将值设置为false

export PXF_OOM_KILL=false

如果要配置(即打开或关闭)PXF服务器达到OOM条件时的自动堆转储PXF_OOM_DUMP_PATH,请在pxf-env.sh文件中找到该设置。

转储堆内存

要打 开此行为,将PXF_OOM_DUMP_PATH属性值设置为JVM将Java堆转储到的文件系统位置。例如,转储到名为的文件/home/gpadmin/pxfoom_segh1

export PXF_OOM_DUMP_PATH=/home/pxfoom_segh1

要在打开后关闭堆转储,请注释掉PXF_OOM_DUMP_PATH属性设置:

#export PXF_OOM_DUMP_PATH=/home/pxfoom_segh1
tomcat选择

​ 可以减少为PXF的基础Tomcat Web应用程序配置的并发工作线程数。正在运行的线程数量的减少将防止任何PXF节点耗尽其内存,同时确保当前查询运行完成。Tomcat的默认行为是将请求排队,直到线程空闲或队列耗尽为止。

PXF的Tomcat线程的默认最大数量为200。PXF_MAX_THREADS配置属性控制此设置。

PXF线程容量由配置文件以及是否压缩数据确定。如果计划在外部Hive数据存储中的大量文件上运行大型工作负载,或者正在读取压缩的ORC或Parquet数据,请考虑指定一个较低的PXF_MAX_THREADS值。

PXF_MAX_THREADSpxf-env.sh文件中找到设置。取消注释设置,并将其更新为所需的值。例如,要将Tomcat线程的最大数量设置为100。

export PXF_MAX_THREADS=100
PXF JDBC连接器时区

将$PXF_CONF/conf/pxf-env.sh中PXF_JVM_OPTS中时间设置为对应时区。

export PXF_JVM_OPTS="<current_settings> -Duser.timezone=America/Chicago
PXF 元数据缓存

PXF_FRAGMENTER_CACHEpxf-env.sh文件中找到设置。如果该设置已被注释掉,请取消注释它,然后更新该值。例如,要关闭片段元数据缓存,将值设置为false

默认情况下启用PXF片段元数据缓存。要关闭片段元数据缓存,或在关闭后重新启用片段元数据缓存。

export PXF_FRAGMENTER_CACHE=false

PXF 使用

配置
  • 在master节点,若未初始化pxf,则初始化pxf。
  • 在初始化的程序目录下找到servers目录,在此目录下新建一个目录用作数据库jdbc-site.xml的目录,如果没有指定,默认会取default目录下的。
  • 初始化后pxf cluster sync。然后启动。
  • 在mysql端和greenplum端进行测试。
验证
  • mysql中
create table user(
    id int not null auto_increment primary key,
    name varchar(64) not null);
		
insert into user(id,name) values(1,'xiaozhao');
insert into user(id,name) values(2,'xiaoqian');
insert into user(id,name) values(3,'xiaoshun');
insert into user(id,name) values(4,'xiaoli');
  • greenplum中
-- 建可读表,该表仅能读取数据,不能插入数据
-- pxf://test.user?PROFILE=Jdbc&SERVER=test
-- -- test.user -> schame.table
-- -- SERVER -> pxf/servers目录下的名称
CREATE EXTERNAL TABLE pxf_test_user(id int,name varchar(44))
            LOCATION ('pxf://test.user?PROFILE=Jdbc&SERVER=test')
            FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');

select * from pxf_test_user;
-- 1	xiaozhao
-- 2	xiaoqian
-- 3	xiaoshun
-- 4	xiaoli

- 建可读表,该表仅能插入数据,不能读取数据
-- pxf://test.user?PROFILE=Jdbc&SERVER=test
-- -- test.user -> schame.table
-- -- SERVER -> pxf/servers目录下的名称
CREATE WRITABLE EXTERNAL TABLE pxf_test_user_write(id int,name varchar(44))
LOCATION ('pxf://test.user?PROFILE=Jdbc&SERVER=test')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_export');

-- 插入一条数据
insert into pxf_test_user_write values(5,'xiaozhou');
-- 一条数据插入进来
select * from pxf_test_user;
1	xiaozhao
2	xiaoqian
3	xiaoshun
4	xiaoli
5	xiaozhou

参考:

  • https://gpdb.docs.pivotal.io/6-5/pxf/troubleshooting_pxf.html pxf

你可能感兴趣的:(PXF简介及使用)