三种用来访问外部表数据源的协议:gpfdist,gpfdists和gphdfs
gpfdist
在外部表指定文件的所有主机上运行GP文件分发程序(gpfdist)。
该程序指向一个给定的目录,并行的为所有segment实例提供外部数据文件服务。
如果文件使用了gzip或者bzip2压缩,gpfdist会自动解压。
可以使用多个gpfdist来提升外部表的扫描性能。
可以使用通配符或者C风格的模式匹配多个文件。
注:
1.实际应用中,一般会把gpfdist部署在ETL文件服务器上,在这个服务器上启动一个或者多个gpfdist。
2.一般制定文件数据的父目录,因为大部分是很多数据文件使用同一个gpfdist,如果路径写的细的话,就不能使用同一个gpfdist。比如在开启gpfdist进程时只指定文件根目录,然后定义外部表时就指定子目录。
3.gpfdist进程不是越多越好,主要取决于网络带宽。
控制节点并行度:
gp_external_max_segs参数设置最大多少segment实例访问同一个gpfdist文件分发程序。
启动和停止gpfdist
要启动gpfdist,必须指定其提供文件服务的目录以及运行的端口(缺省为HTTP端口8080)
在后台启动gpfdist(日志信息和出错信息输出到日志文件)
$gpfdist -d /var/load_files -p 8081 -l /home/gpadmin/log &
要在同一个ETL主机启动多个gpfdist服务,为每个服务指定不同的目录和端口。例如:
$gpfdist -d /var/load_files1 -p 8081 -l /home/gpadmin/log1 &
$gpfdist -d /var/load_files2 -p 8082 -l /home/gpadmin/log2 &
停止后台gpfdist服务:
第一步找到进程号,
$ps -ef|grep gpfdist
第二步杀掉进程,kill -9 XXX
select pg_cancel_backend(1234);
gpfdist 故障诊断:
确保GP segment可以访问gpfdist的网络
使用wget命令来测试GP集群的连接性
$ wget http://gpfdist_hostname:port/filename
例如:
$ wget http://mdw:8081/a.txt
需要确保CREATE EXTERNAL TABLE 定义了hostname,port以及gpfdist的文件名。
gpfdists
gpfdists是gpfdist的安全版本,其开启的加密通信并确保文件与GP之间的安全认证。
file(适用内部数据)
1、如果使用file://协议,则外部文件必须存放在segment主机上面。
2、指定的符合segment实例数量的URLs将并行工作来访问外部表
3、每个segment主机外部文件的数量不能超过segment实例数量。
4、pg_max_external_files用来确定每个外部表中允许多少个外部文件。
select * from pg_max_external_files
gphdfs
1、该协议指定一个可以在HDFS上包含通配符的路径。
2、在GP链接到HDFS文件时,所有数据将从HDFS数据节点被并行读取到GP的segment实例以快速处理。
3、每个GPsegment实例值读取一组Hadoop数据块
4、对于写来说,每个GP segment实例值写giant实例包含的数据