Greenplum Stream Server(GPSS)介绍

1.GPSS简介

Greenplum Stream Server (GPSS)是一个ETL(提取、转换、加载)工具。GPSS服务器的一个实例从一个或多个客户机接收流数据,使用Greenplum数据库可读的外部表将数据转换并插入到目标Greenplum表中。数据源和数据格式是特定于客户机的。数据源和数据格式由客户端指定。

Greenplum Stream Server包括gpss命令行工具。运行gpss时,会启动一个gpss实例,此实例无限期地等待客户端数据。

Greenplum Stream Server还包括gpsscli命令行工具,这是一个客户端工具,用于向GPSS实例提交数据加载作业并管理这些作业。

2.GPSS架构

Greenplum Stream Server是一个gRPC服务器。GPSS gRPC服务定义的内容包括:连接到Greenplum数据库和检查Greenplum元数据所需的操作和消息格式;数据从客户端写入greenplum数据库表所需的操作和消息格式。

注:有关gRPC内容参考:https://grpc.io/docs/

gpsscli命令行工具是Greenplum Stream Server的gRPC客户端工具,也可以用于操作Greenplum-Kafka 集成和Greenplum-Informatica连接器。可以使用GPSS API开发自己的GPSS gRPC客户端。

Greenplum Stream Server架构如下图:

Greenplum Stream Server 处理ETL任务的执行流程如下所示:

  1. 用户通过客户端应用程序启动一个或多个ETL加载作业;
  2. 客户端应用程序使用gRPC协议向正在运行的GPSS服务实例提交和启动数据加载作业;
  3. GPSS服务实例将每个加载请求事务提交给Greenplum集群的Master节点,并创建或者重用已存在外部表来存储数据。
  4. GPSS服务实例将客户端提交的数据直接写到Greenplum集群Segment节点中。

3.安装

3.1.安装前准备条件

Greenplum流服务器gpss和gpsscli命令行工具,在安装Greenplum数据库版本5.16及其以上版本时,已自动安装在其中,无需进行单独安装。

在启动GPSS服务器实例之前,请确保:

  1. 安装并启动一个兼容GPSS的Greenplum数据库版本,建议安装grenplum 5.16以上版本;
  2. greenplum master节点配置好主机名,确保可以通过主机名访问;
  3. 如果您的Greenplum数据库主服务器进程没有在默认端口(5432)上运行,则可识别它所运行的端口。
  4. 确保GPSS所在主机与客户端、及Greenplum master和所有的segment能够连通;
  5. 如果您正在使用gpsscli客户端实用程序,确保gpsscli能够连接到客户端主机,例如使用kafka作为数据源,必须确保能够连接到kafka集群,同时gpsscli能够连接到greenplum master和所有segment节点。

3.2.注册GPSS扩展

必须在需要利用gpss写入数据的表,所在的数据库注册gpss扩展,这样才能利用gpss向该数据库下的表加载数据。需要注意数据库权限问题,最好是超级用户或该数据库的所有者。

注册gpss扩展步骤如下: step 1.配置greenplum环境变量:利用gpadmin超级用户登录到greenplum master节点

代码语言:javascript
复制
gpmaster$ source $GP_HOME/greenplum_path.sh

如果已经在.bashrc中配置了环境变量,省约该步。

step 2.利用psql登录到需要注册gpss的数据库

代码语言:javascript
复制
gpmaster$ psql -d testdb

输入以下命令注册EXTENSION

代码语言:javascript
复制
testdb=# CREATE EXTENSION gpss;

step 3.对于其它需要利用gpss向数据库load data,对该数据库执行2,3步操作

3.3.配置Greenplum Streaming Server

可以通过json格式的配置文件配置对Greenplum流服务器的调用。这个配置文件包含一些属性,这些属性标识GPSS服务的监听地址以及gpfdist主机和端口号。还可以在文件中指定加密选项。

示例文件内容如下:

代码语言:javascript
复制
    {
        "ListenAddress": {
            "Host": "gpss_host",
            "Port": gpss_portnum [,
            "SSL": use_ssl ]
        },
        "Gpfdist": {
            "Host": "gpfdist_host",
            "Port": gpfdist_portnum
        } [,
        "Certificate": {
            "CertFile": "certfile_path",
            "KeyFile": "keyfile_path",
            "CAFile": "CAfile_path"
        }]
    }

配置文件说明见下。

GPSS部分如下:

  • Host:gpss_host。gpss所在主机的IP或主机名,默认为127.0.0.1。
  • Port:gpss_portnum。gpss服务实例的监听端口,默认为5000。
  • SSL:boolean类型,表示是否需要对连接加密,默认为false。

Gpfdist部分如下:

  • Host:gpfdist_host。gpfdist运行所在的主机IP或主机名。
  • Port:gpfdist_portnum。gpfdist端口,默认为8080。

GPSS和Gpfdist加密部分如下:

  • CertFile: certfile_path。服务器证书文件系统路径。
  • KeyFile: keyfile_path。服务器密钥文件系统路径。
  • CAFile: CAfile_path。证书颁发机构文件的文件系统路径。CAfile_path必须包含整个证书授权链。

配置文件例子如下:

代码语言:javascript
复制
    {
        "ListenAddress":{
            "Host":"localhost",
            "Port":12345
        },
        "Gpfdist":{
            "Host":"localhost",
            "Port":9899
        },
        "Certificate":{
            "CertFile":"/home/gpadmin/gpdb_bin/ext/server.crt",
            "KeyFile":"/home/gpadmin/gpdb_bin/ext/server.key",
            "CAFile":"/home/gpadmin/gpdb_bin/ext/rootCA.pem"
        }
    }

3.4.启动GPSS

执行如下命令启动:

代码语言:javascript
复制
gpss gpsscfg.json --log-dir ./gpsslogs

–log-dir表示配置gpss的日志目录

特别注意:gpss跟踪内存中客户端作业的加载过程。当停止GPSS服务器实例时,将丢失所有已注册的作业。重启GPSS实例后,必须重新提交以前提交的作业。gpss将从上次的记录偏移量位置恢复作业。