Greenplum PXF查询外部表报pxf.fs.basePath无效配置错误
错误触发根本原因
PXF 6.0及以上版本新增了服务端访问路径校验规则,default服务默认要求显式配置文件系统访问基础路径,禁止未做路径边界限制直接访问文件系统。
你当前的报错本质是PXF服务端启动后校验default服务配置时,发现缺失pxf.fs.basePath配置项,直接判定服务配置无效,和Parquet文件格式、HDFS权限、建表语法本身没有直接关系。
pxf.fs.basePath 合法取值规则 该参数用于定义PXF对应服务可访问的文件系统根边界,合法取值需满足以下要求:
- 必须是HDFS(或其他对接的文件系统)上真实存在的绝对路径,不支持相对路径、
~路径缩写 - 不能包含通配符、正则表达式字符
- 路径权限需要保证PXF进程的运行用户有对应读(写)权限
针对当前场景,可配置的合法值包括/(允许访问整个HDFS根目录)、/user/hadoopuser(允许访问hadoopuser用户目录下所有内容)、/user/hadoopuser/raw(仅允许访问当前Parquet文件所在目录)。
注意:配置该参数后,外部表LOCATION中
pxf://后填写的路径为相对于pxf.fs.basePath的相对路径,不能再写HDFS全绝对路径,否则会触发路径不存在错误。
参数配置位置
该参数为PXF服务端配置,需要在所有部署PXF服务的节点上操作:
- 进入
default服务的配置目录,官方安装包默认路径为/etc/pxf/servers/default/,如果是自定义部署的PXF,对应路径为$PXF_HOME/servers/default/ - 编辑目录下的
pxf-site.xml文件,添加如下配置项,value替换为实际要设置的基础路径:
<property> <name>pxf.fs.basePath</name> <value>/user/hadoopuser</value> </property>
- 所有节点配置完成后,依次执行
pxf cluster sync同步配置、pxf cluster restart重启PXF集群,配置即可生效。
建表语句修正
配置生效后,原有建表语句需要把LOCATION里的全路径改成相对路径,正确写法如下:
create external table requests(id bigint, full_name text, req_date timestamp) location('pxf://raw?PROFILE=hdfs:parquet') format 'CUSTOM' (formatter='pxfwritable_import');
此时PXF会自动把basePath和相对路径拼接为/user/hadoopuser/raw,和实际存储Parquet文件的HDFS路径完全匹配,即可正常查询。
内容的提问来源于stack exchange,提问作者Bogdan Goncharenko
相关产品推荐
相关产品推荐

