PXF 常见问题

本文档介绍 PXF 相关的常见问题。

1 remote component error,Failed connect to localhost:5888; Connection refused (libchurl.c:950)


PXF 部署后,访问 HDFS 报错:

remote component error,Failed connect to localhost:5888; Connection refused (libchurl.c:950)

解决方案

  1. PXF 访问文件的方式需要在 Master 节点开启 PXF server,但是数据文件需要在 Segment PXF 上。
  2. pxf/servers/core-site.xml和hdfs-site.xml 一定要和 Hadoop 配置文件相同。
  3. pxf/servers/core-site.xml 配置用户访问权限。
  4. Hadoop 上文件的用户名和组需要和 pxf/core-site.xml 指定的一致。

2 文件入库时,某一个字段包含换行符,将一行数据切分成两行,再以分隔符切分,就会导致数据与字段数不一致,也就是说一行数据里有两个 \n 一个在中间一个在尾部 但是中间那个不能被当做换行符处理


解决方案

  1. 在选项里加入 escape 'off'
  2. 使用 format 'text:multi'

3 PXF 访问 S3 可以递归当前目录,或者所有子目录下的所有文件吗?


可以的。

前提条件

PXF 可以正常访问 S3。

解决方案

复制 aa.csv 文件并命名为 ab.csv 上传到 bucket ymatrix 文件路径为 ymatrix/test 目前 ymatrix/test 有文件 aa.csvab.csv 数据条数均为 1000条。

  1. 创建外部表
DROP FOREIGN TABLE public.chen_test ;
CREATE FOREIGN TABLE public.chen_test (
    c1 text,
    c2 text,
    c3 text
)
SERVER s3server_online
OPTIONS (
    format 'csv',
    resource 'ymatrix/test/a*.csv',
      JSONIFY_ARRAY 'TRUE',
      JSONIFY_MAP 'TRUE',
      JSONIFY_RECORD 'TRUE'
);
  1. 查看数据条数
    SELECT count(*) FROM chen_test ;
    count 
    -------
    2000
    (1 row)

    使用通配符 * 可以递归目录下的所有子目录的所有文件。

注意!
使用通配符可以匹配到的文件,文件格式必须一致,否则会报错。

4 PXF 可以读取 S3 存储上的文件吗?如何读取?


可以的。

TEXTCSVPARQUETJSON 格式的文件在被 PXF 读取时,会按照 128MB 一片的尺寸自动切片,并按照分片由相应 Segment 并行读取。