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任务的执行流程如下所示:
- 用户通过客户端应用程序启动一个或多个ETL加载作业;
- 客户端应用程序使用gRPC协议向正在运行的GPSS服务实例提交和启动数据加载作业;
- GPSS服务实例将每个加载请求事务提交给Greenplum集群的Master节点,并创建或者重用已存在外部表来存储数据。
- GPSS服务实例将客户端提交的数据直接写到Greenplum集群Segment节点中。
3.安装
3.1.安装前准备条件
Greenplum流服务器gpss和gpsscli命令行工具,在安装Greenplum数据库版本5.16及其以上版本时,已自动安装在其中,无需进行单独安装。
在启动GPSS服务器实例之前,请确保:
- 安装并启动一个兼容GPSS的Greenplum数据库版本,建议安装grenplum 5.16以上版本;
- greenplum master节点配置好主机名,确保可以通过主机名访问;
- 如果您的Greenplum数据库主服务器进程没有在默认端口(5432)上运行,则可识别它所运行的端口。
- 确保GPSS所在主机与客户端、及Greenplum master和所有的segment能够连通;
- 如果您正在使用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将从上次的记录偏移量位置恢复作业。