在功能上,GPHDFS和PXF都用于为Greenplum提供对Hadoop上的数据访问,都采用Java的工作进程与Greenplum的外部表协议集成的工作方式。下面将详细比较二者的区别,说明为什么PXF是GPHDFS的下一代产品。
❏外部表协议
GPHDFS对可执行外部表进行了封装,通过fork进程的方式启动Java虚拟机,然后调用Hadoop依赖库完成对HDFS文件的访问。这种父子进程的方式使得Java虚拟机也拥有gpadmin权限,导致安全性差、耦合紧密。PXF使用类似GPFDIST的协议,通过HTTP的方式将PXF进程与Greenplum进程解耦合。PXF作为独立进程,可以支持各种复杂的权限认证方式,比如Kerberos。
❏数据交换方式
GPHDFS从配置文件(GUC)中获取Hadoop客户端有关的配置信息,通过环境变量的方式传递给Java虚拟机进程;当访问文件时,通过自定义URL参数的方式传递相关参数。GPHDFS从Java进程的标准输出中读取返回的结果,耦合紧密。
❏外部表协议
PXF由于使用HTTP协议,也是通过URL编码方式传递参数,从HTTP响应中获取返回的数据结果。HTTP请求的方式相对于环境变量和标准输出的主要优势是使得PXF以服务的形式运行,不再依赖Greenplum节点的状态,因而更加灵活高效。
❏进程模型
对于每一个GPHDFS查询,Greenplum都需要在每个Segment节点上fork一个Java虚拟机来处理请求;对于PXF,则是每个Segment节点发送一个HTTP请求给运行在这个主机上的PXF进程,每个主机上只需要运行一个PXF进程。因此,PXF会比GPHDFS节省更多Java虚拟机的运行开销,节约系统资源。
❏功能比较



