gpfdist

gpfdist

将数据文件载入Greenplum数据库Segment或从其中写出数据文件到文件系统。

概要

gpfdist [-d directory] [-p http_port] [-P last_http_port] [-l log_file]
        [-t timeout] [-S] [-w time] [-v | -V] [-s] [-m max_length]
        [--ssl certificate_path [--sslclean wait_time] ]
        [-c config.yml]
        
        gpfdist -? | --help 
        
        gpfdist --version

描述

gpfdist是Greenplum数据库并行文件分发程序。它可以被外部表和gpload 用来并行地将外部表文件提供给所有的Greenplum数据库Segment。它由可写外部表使用,并行接受来自Greenplum数据库 Segment的输出流,并将它们写出到文件中。

Note: gpfdistgpload是在Greenplum的主版本级别有效的。 例如,Greenplum 4.x版本的gpfdist不能用于Greenplum 5.x或6.x版本。

为了使外部表使用gpfdist,外部表定义的LOCATION子句必须使用 gpfdist://协议(参见Greenplum数据库命令CREATE EXTERNAL TABLE)。

Note: 如果--ssl选项被指定来启用SSL安全性,请使用gpfdists://协议创建外部表。

使用gpfdist的好处是在读取或写入外部表时可以保证最大的并行性,从而提供最佳的性能, 并且更容易管理外部表。

对于只读外部表,当用户在外部表中SELECT时,gpfdist 将数据文件均匀地分析并提供给Greenplum数据库系统的所有Segment实例。对于可写的外部表, gpfdist在用户INSERT外部表时接受来自Segment的 并行输出流,并写入输出文件。

对于可读外部表,如果被加载的文件使用gzipbzip2 (具有.gz.bz2的文件扩展名),gpfdist 会在装载之前自动解压文件,前提是gunzipbunzip2在用户的 可执行文件路径中。

Note: 目前,可读外部表不支持在Windows平台上的压缩,可写外部表不支持任何平台上的压缩。

当使用gpfdistgpfdists协议读写数据时,Greenplum数据库 在HTTP请求头部中包含X-GP-PROTO,以指示该请求来自Greenplum数据库。该工具拒绝 请求头部中不包含X-GP-PROTO的HTTP请求。

大多数情况下,用户很可能希望在ETL机器而不是安装Greenplum数据库的主机上运行gpfdist。 要在其他主机上安装gpfdist,只需简单的将该程序复制到该主机上,然后将gpfdist 添加到用户的$PATH路径中。

Note: 使用IPv6时,请始终将数字IP地址包裹在括号内。

选项

-d directory
指定一个目录,gpfdist将从该目录中为可读外部表提供文件,或为可写外部表创建 输出文件。如果没有指定,默认为当前目录。
-l log_file
要记录标准输出消息的完全限定路径和日志文件名称。
-p http_port
gpfdist提供文件要使用的HTTP端口。默认为8080。
-P last_http_port
gpfdist将会提供文件服务的端口号范围 (http_portlast_http_port 包含岂止号码)中最后一个HTTP端口号号码。gpfdist会 以端口号设定范围内第一个成功绑定的端口号作为服务端口。
-t timeout
设置Greenplum数据库建立与gpfdist进程的连接所允许的时间。默认值是5秒。 允许的值是2到7200秒(2小时)。在网络流量大的系统上可能要增加。
-m max_length
设置以字节为单位的最大数据行长度。默认值是32768。当用户数据包含非常宽的行时 (或者当line too long错误消息发生时)应该使用,否则不应该使用, 因为它会增加资源分配。有效范围是32K到256MB(Windows系统上限为1MB)。
Note: 如果用户指定较大的最大行长度并运行大量的gpfdist并发连接, 则可能会发生内存问题。例如,使用96个并行gpfdist进程需要大约 24GB的内存((96 + 1) x 246MB)。
-s

启用简化的日志记录。指定此选项时,只有具有WARN级别或者更高级别的消息才 会写入gpfdist日志文件。INFO级别的消息不写入日志文件。 如果未指定这一选项,则所有gpfdist消息都写入日志文件。

用户可以指定此选项以减少写入日志文件的信息。
-S (use O_SYNC)
使用O_SYNC标志打开同步I/O的文件。任何对结果文件描述的写都会阻塞gpfdist, 直到数据被物理地写到底层硬件。
-w time
设置关闭目标文件(如命名管道)之前Greenplum数据库延迟的秒数。 默认值是0,没有延迟。最大值是7200秒(2小时)。
对于具有多个Segment的Greenplum数据库,在将不同Segment中的数据写入文件时,Segment之间可能会有延迟。 用户可以指定Greenplum数据库关闭文件之前要等待的时间,以确保所有数据都被写入文件。
--ssl certificate_path
将SSL加密添加到使用gpfdist传输的数据。使用--ssl certificate_path选项执行gpfdist之后, 从此文件服务器加载数据的唯一方法是使用gpfdist://协议。 有关gpfdist:// 协议的信息,请参阅Greenplum数据库管理员指南中的“装载和卸载数据”部分。
certificate_path中指定的位置必须包含以下文件:
  • 服务器证书文件,server.crt
  • 服务器私钥文件,server.key
  • 可信证书机构,root.crt

根目录(/)不能指定为certificate_path

--sslclean wait_time
使用--ssl选项运行该工具时,设置该工具完成向Greenplum数据库Segment读写数据 后关闭SSL会话和清除SSL资源之前要延迟的秒数。默认值是0,没有延迟。最大值是500秒。如果延迟增加, 传输速度降低。
在某些情况下,复制大量数据时可能会发生此错误:gpfdist server closed connection。 为了避免这类错误,用户可以增加一个延迟,例如--sslclean 5
-c config.yaml
指定gpfdist在装载或抽取数据时,用来选择要应用的转换的规则。 gpfdist配置文件是一个YAML1.1文档。
有关文件格式的信息,请参阅Greenplum数据库管理员指南中的配置文件格式配置件格式。 有关用gpfdist配置数据转换的信息,请参阅Greenplum数据库管理员指南 中的使用gpfdist和gpload转换外部数据转换XML数据。
该选项在windows平台中不可用。
-v(详细模式)
显示进度和状态信息的详细模式。
-V(非常详细模式)
显示由该工具生成的所有输出信息的详细模式。
-?(帮助)
显示在线帮助。
--version
显示该工具的版本。

注解

服务器配置文件verify_gpfdists_cert用来控制Greenplum数据库与gpfdist 工具沟通进行读写数据时是否启用SSL授权。当在进行Greenplum数据库外部表与gpfdist 工具测试时,客户可以设置该参数值为false来禁用授权。如果参数设置为false, 以下SSL异常会被忽略:
  • gpfdist使用的自有签名SSL证书授权不被Greenplum信任。
  • SSL证书中包含的主机名与gpfdist主机名不匹配。
Warning: 禁用SSL证书授权会暴露安全风险,因为gpfdist SSL不会再进行验证。

如果gpfdist工具在读写操作中hang住,客户可以在下次hang住时生成一个 core dump文件来帮助调试问题原因。在gpfdist强制退出之前, 设置环境变量GPFDIST_WATCHDOG_TIMER为异常时间段的秒数。 当客户设置了该环境变量,并且gpfdist hang住时,工具会在特定秒数后停止并创建 core dump文件,发送相关信息到日志文件。

例子中设置的Linux系统环境变量为gpfdist在无活动操作后300秒(5分钟)退出。
export GPFDIST_WATCHDOG_TIMER=300

示例

使用端口8081从指定目录提供文件(并在后台启动gpfdist):

gpfdist -d /var/load_files -p 8081 &

在后台启动gpfdist并将输出和错误重定向到日志文件:

gpfdist -d /var/load_files -p 8081 -l /home/gpadmin/log &

停止在后台运行的gpfdist

--首先找到它的进程ID:

ps ax | grep gpfdist

--然后杀死该进程,例如:

kill 3456

另见

gploadGreenplum数据库管理员指南中的CREATE EXTERNAL TABLE