У меня есть UDF Python, который подключается к HBase с помощью Happybase. Если я запускаю код из Python 2.7, он отлично работает.«Нет модуля с именем happybase» при работе с PIG
Однако, когда я называю Python UDF из Свиньи 0.15.0 Я получаю следующее сообщение об ошибке:
ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1121: Python Error. Traceback (most recent call last): import happybase ImportError: No module named happybase
В моей Свинье сценарии я регистрация моего Python скрипт (pigtest.py), как это:
REGISTER 'pigtest.py' using jython as myfuncs;
Я попытался установить путь Happybase в моем сценарии Python следующим образом, но это не делает разницы:
import sys
sys.path.append('/usr/local/lib/python2.7/dist-packages/happybase')
import happybase
Я также попытался добавить «/usr/local/lib/python2.7/dist-packages/happybase» в JYTHON_PATH в файле .bashrc (я на Ubuntu), но при этом появляется такая же ошибка.
Мне кажется, что мне нужно установить путь Happybase куда-нибудь, но я не могу понять, где.
Когда вы регистрируете UDF, я считаю, что путь, на который он смотрит, - HDFS. Поэтому, если happybase находится в вашей локальной файловой системе, он не будет работать так, как вы его настроили. Это также объясняет, почему pigtest.py работает самостоятельно - переместите его на другую машину без счастливой базы, и она не будет работать снова –
Я вижу, так есть способ заставить Happybase работать в этом сценарии? Кроме того, моя «pigtest.py» находится в локальной файловой системе (той же папке, что и скрипт Pig), а не в HDFS, но она ее находит или это другое? –
Поскольку вы «REGISTER» pigtest.py'', это будет искать файлы локально, но загружает их в HDFS за кулисами. Вы можете неявно поставить 'pigtest.py' на HDFS, затем сделать что-то вроде' REGISTER 'hdfs: /// tmp/pigtest.py''. Что касается проблемы Happybase, я должен был бы изучить ее дальше, так как раньше я не использовал Python UDF. –