【发布时间】:2015-12-15 12:14:49
【问题描述】:
我有一个 Python UDF,它使用 Happybase 连接到 HBase。如果我从 Python 2.7 运行代码,它会完美运行。
但是,当我从 Pig 0.15.0 调用 Python UDF 时,出现以下错误:
错误 org.apache.pig.tools.grunt.Grunt - 错误 1121:Python 错误。 Traceback(最近一次调用最后一次):import happybase ImportError: No module named happybase
在我的 Pig 脚本中,我正在注册我的 Python 脚本 (pigtest.py),如下所示:
REGISTER 'pigtest.py' using jython as myfuncs;
我尝试如下在我的 Python 脚本中设置 Happybase 路径,但这并没有什么不同:
import sys
sys.path.append('/usr/local/lib/python2.7/dist-packages/happybase')
import happybase
我还尝试将“/usr/local/lib/python2.7/dist-packages/happybase”添加到 .bashrc 文件中的 JYTHON_PATH(我在 Ubuntu 上)但同样的错误出现了。
在我看来,我需要在某个地方设置 Happybase 路径,但我不知道在哪里。
【问题讨论】:
-
注册UDF时,我相信它查看的路径是HDFS。因此,如果happybase 在您的本地文件系统上,它将无法按照您设置的方式工作。这也解释了为什么 pigtest.py 可以自己工作——将它移到另一台没有happybase 的机器上,它就无法再次工作了
-
我明白了,那么有没有办法让 Happybase 在这种情况下工作?此外,我的“pigtest.py”位于本地文件系统(与 Pig 脚本相同的文件夹)上,而不是在 HDFS 中,但它确实找到了它,或者有什么不同?
-
既然你这样做了
REGISTER 'pigtest.py',它将在本地查找文件,但在后台将其上传到 HDFS。您可以将pigtest.py隐式放在HDFS 上,然后执行REGISTER 'hdfs:///tmp/pigtest.py'之类的操作。至于 Happybase 问题,我必须进一步研究,因为我之前没有使用过 Python UDF。 -
我发现如果我尝试从 Jython(在 PIG 之外)导入 happybase,我会遇到同样的错误。我认为必须有一个环境变量或我需要指定 Happybase 文件路径的东西。知道在使用 Jython 时需要做什么来导入模块吗?我安装了 Jython 2.5.3。
-
不确定,从未真正使用过 Jython。您在 python 上使用 Jython 有什么特别的原因吗?
标签: python hbase apache-pig jython happybase