ITPub博客

首页 > Linux操作系统 > Linux操作系统 > greenplum的gpload在window下的使用问题

greenplum的gpload在window下的使用问题

原创 Linux操作系统 作者:jack22220613 时间:2011-09-08 10:57:43 0 删除 编辑

近期研究了下gpload在window下的使用问题(linux上就不说了,可以直接使用),由于该工具还是很方便的(能根据需要自动启停gpfdist、无需手动创建外部表),但最终没有成功入库,以下是分析尝试过程,供还想继续研究的做一下参考。

1、安装gpload

我安装的文件是greenplum-loaders-4.1.0.0-build-5-WinXP-x86_32.msi,可以自行下载,现在下载好像比较费事了,还需要注册等一系列繁琐事项,地址 http://gpn.greenplum.com,下一步就ok。安装成功之后,设置环境变量 GPHOME_LOADERS=C:\Program Files\Greenplum\greenplum-loaders-4.1.0.0-build-5

在PATH中添加 %GPHOME_LOADERS%bin

2、安装python

由于在window上要想使用gpload.py,需要先安装python,版本问题非常关键,根据adminguide所说,以及gpload.py中的提示,需要python2.4.4 or higher,结果开始我下载了python3.2,安装过程很简单,下一步就ok,安装成功之后,需要配置环境变量 PATH,将 C:\Python32\ 添加进去,并创建环境变量 PYTHONPATH ,

PYTHONPATH=%GPHOME_LOADERS%bin\lib

以下开始调试过程

由于python以前没接触过,所以这部分环境变量的设置也是经过n次的尝试,不过问题并没有解决,此时在cmd下,cd 到 %GPHOME_LOADERS%bin 目录下,执行gpload时,一直报错,except Exception, e:  这样的错误,开始以为是环境变量设置的问题,在经过最简单的 hello world测试之后,发现是版本的问题,helloworld.py内容如下:

#!/usr/bin/env python

print "hello world!"

--------报错 invalid syntax

所以,将python3.2卸载掉,安装python2.6,再次运行helloworld.py,测试通过。(后在linux服务器上,查看python安装的版本,发现也是2.6)由于版本问题,浪费了很多时间。

注意:

在cmd窗口下,cd到gpload目录下,执行gpload -f xxxx.yml文件(此处的yml文件是没有问题的,已经在linux下经过了验证),提示:

gpload needs pyyaml.  You can get it from http://pyyaml.org.

这是由于开始时,设置了错误的PATH 和 PYTHONPATH所致,其实只是这两个环境变量的值顺序错了,这点我相信经常用linux和unix的朋友应该非常了解,系统在查找路径时,会从开始往后找,如果第一个就找到了,就不再往下查找了。

其实,我在这里写这个的目的是想说明一下yaml这个翻译器,在用yml脚本的时候,需要在安装完python后,再单独下载一个yaml解析器,这样才能正确翻译yml脚本的内容,下载地址http://pyyaml.org./,找到相应版本,很容易下载。

(注:安装gpload时,在gpload安装目录下,已经有了一个yaml,不需要单独安装了,只要将PATH 和PYTHONPATH设置正确就不会出这个问题了)

接下来,再次执行 gpload -f xxxx.yml还是继续报错,如下:

C:\Python26>gpload.py -f r_ne_cell_c_bj.yml
gpload was unable to import The PyGreSQL Python module (pg.py) - DLL load failed: 找不到指定的模块。

打开gpload.py,找到36行,将如下代码:

from pygresql import pg

改成:

# from pygresql import pg

import  pygresql

或者

from pygresql import *

然后再次执行 gpload -f xxxx.yml还是继续报错,如下:

2011-09-07 15:25:02|INFO|gpload session started 2011-09-07 15:25:02
2011-09-07 15:25:02|ERROR|could not connect to database: global name 'pg' is not defined. Is the Greenplum Database running on port 5432?
2011-09-07 15:25:02|INFO|rows Inserted          = 0
2011-09-07 15:25:02|INFO|rows Updated           = 0
2011-09-07 15:25:02|INFO|data formatting errors = 0
2011-09-07 15:25:02|INFO|gpload failed

该错误是出现在代码中第1543行,代码如下:

self.db = pg.DB( dbname=self.options.d
                           , host=self.options.h
                           , port=self.options.p
                           , user=self.options.U
                           , passwd=self.options.password
                           )

从错误信息来看,应该是 pg未定义造成的,而在代码中的 from pygresql import pg ,正是应该解决该问题的,然而确报错,具体原因就不得而知了,最终我觉得应该是这些脚本的问题。

另外,在GPHOME_LOADERS\bin\lib\pygresql 下,有2个文件我比较关注,其中一个是pg.py,另一个是__init__.py,其中pg.py定义了一个DB的class,代码中pg.DB的目的应该是引用该文件中的class,另一个文件__init__.py是空的,这个比较奇怪,按理说,这个应该是初始化用的才对,当然这也是我的猜测,我本人不懂python。

以上这些内容,也是我这几天的试验和分析,虽然最终没有成功,但也可以做些参考。如有哪位大侠将这个功能实现了的,还望留言提醒下,本人非常感谢。

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10037372/viewspace-706906/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-05-13

  • 博文量
    94
  • 访问量
    357955