windows上安装Greenplum的客户端使用gpload


前言

公司数据中心搭建了一套Greenplum数仓,而我们团队有许多数据目前依赖别人的数仓进行抽取和提供,由于源数据库在内网,跟公司GP网络并不互通,因此想要利用一个可以同时访问两边数据的服务器作为ETL服务器,进而实现数据同步。同事对GP的数据加载速度赞不绝口,因此决定研究下GP的数据加载方式gpload,刚好可以访问两边数据的服务器是一台windows,因此有了此文排雷过程记录。

安装‘Greenplum Clients for Windows’

Greenplum Clients for Windows 是GP官方发布的GP客户端组件,包含了连接GP的驱动以及我们要用的gpload工具。到官网‘https://network.pivotal.io/products/pivotal-gpdb#/releases/683946/file_groups/2661’进行下载,下载需要注册和登录账号,按提示操作即可。

1594635178916

下载完后直接双击运行安装,安装完成后目录如下:

1594635294759

其中‘greenplum_clients_path.bat’是环境变量配置的批处理文件,安装后需要运行一下。

另外,这个工具是依赖与Python的,因此需要安装Python,经测试Python 2.6.5可以正常运行,python 2不会向Python3那样安装时可以勾选添加环境变量,因此安装后记得手动添加一下。

环境配置好后如果一切正常的话在命令行直接输入‘gpload -?’可以看到gpload帮助信息,但往往没那么顺利。

1594635997784

爬坑记录

1、Python版本问题

如下图提示,肉眼看起来Python异常捕获这样写并无问题,更换Python版本后就没问题了。

1594636500601

2、包引入BUG

提示 ‘pload was unable to import The PyGreSQL Python module (pg.py) ’ ,我们找到gpload.py文件的第36行,发现只从pygresql包引入了pg:

try:
    from pygresql import pg
except Exception, e:
    errorMsg = "gpload was unable to import The PyGreSQL Python module (pg.py) - %s\n" % str(e)
    sys.stderr.write(str(errorMsg))
    errorMsg = "Please check if you have the correct Visual Studio redistributable package installed.\n"
    sys.stderr.write(str(errorMsg))
    sys.exit(2)

将其改成直接引入包或从包引入所有

try:
    from pygresql import *
    #import pygresql
except Exception, e:
    errorMsg = "gpload was unable to import The PyGreSQL Python module (pg.py) - %s\n" % str(e)
    sys.stderr.write(str(errorMsg))
    errorMsg = "Please check if you have the correct Visual Studio redistributable package installed.\n"
    sys.stderr.write(str(errorMsg))
    sys.exit(2)

3、权限问题

Windows上权限比较难搞,遇到‘WindowsError:[Error 5]’问题既是权限问题,根据错误提示找到pgload.py里面有一段创建日志文件存放目录的代码:

# default to gpAdminLogs for a log file, may be overwritten
        if self.options.l is None:
            self.options.l = os.path.join(os.environ.get('HOME', '.'),'gpAdminLogs'if not os.path.isdir(self.options.l):
                os.mkdir(self.options.l)

            self.options.l = os.path.join(self.options.l, 'gpload_' + \
                                          datetime.date.today().strftime('%Y%m%d') + '.log')

其中os.environ.get(‘HOME’, ‘.’)是获取当前用户目录,担心因为不是管理员导致用户目录权限不够,因此其改成存放在安装目录下:

# default to gpAdminLogs for a log file, may be overwritten
        if self.options.l is None:
            self.options.l = os.path.abspath('.')
            #if not os.path.isdir(self.options.l):
            #    os.mkdir(self.options.l)

            self.options.l = os.path.join(self.options.l, 'gpload_' + \
                                          datetime.date.today().strftime('%Y%m%d') + '.log')

结果还是报错,后面将greenplum客户端安装目录权限分配给所有用户,终于解决。

1594637587120


文章作者: 无咎
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 无咎 !
评论
 上一篇
开源ETL工具DataX在Windows上安装部署 开源ETL工具DataX在Windows上安装部署
前言ETL是数仓平台里面非常重要的一个组件,此前使用上海绎维公司的Fone产品,BS结构图形化界面操作,虽有一些功能操作不便,但总体来说还是可以轻松上手的,现在公司内部尝试自建数据平台,在ETL工具选择上面发现开源且有图形化界面的只有CS架
2020-07-16
下一篇 
使用frp实现内网穿透 使用frp实现内网穿透
前言前一段时间 被TeamViewer折磨得够呛,各种‘检测到商业行为’和‘连接失败,未知原因’,因此决心要找到可以远程操控的替代方案,度娘上看了一圈,对以下两个比较有兴趣: frp内网穿透:配置简单,需要一个vps做服务器,所有数据流量
2020-06-17
  目录