gpfdist

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

概要

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

描述

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

Note: gpfdist和gpload是在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的 并行输出流,并写入输出文件。

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

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

当使用gpfdist或gpfdists协议读写数据时,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_port到last_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分钟)退出。

  1. export GPFDIST_WATCHDOG_TIMER=300

示例

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

  1. gpfdist -d /var/load_files -p 8081 &

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

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

停止在后台运行的gpfdist:

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

  1. ps ax | grep gpfdist

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

  1. kill 3456

另见

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