我能够无错误地构建和安装 Pydoop ,因此,例如,我可以执行以下操作:
>>> import pydoop
>>> pydoop.__version__
'0.10.0'
但是,当我尝试导入主要的Pydoop模块,例如pipes
或hdfs
时,我正在 ImportError
:
>>> import pydoop.hdfs
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pydoop/hdfs/__init__.py", line 79, in <module>
from fs import hdfs, default_is_local
File "pydoop/hdfs/fs.py", line 28, in <module>
hdfs_ext = pydoop.import_version_specific_module("_hdfs")
File "pydoop/__init__.py", line 111, in import_version_specific_module
return import_module(complete_mod_name(name))
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named _hdfs_2_0_0_cdh_4_3_0
此外,当我尝试使用pydoop script
时,我得到了这样的提示:
...
ImportError: /usr/local/lib/python2.7/dist-packages/pydoop/_pipes_2_0_0_cdh_4_3_0.so: undefined symbol: BIO_s_mem
BIO_s_mem
是来自 libssl
(OpenSSL)的符号,因此我猜Pydoop无法找到此共享库。我确保它可用,以.so
(而不是.so.1
)结尾,并且位于LD_LIBRARY_PATH
。
那么造成此错误的原因可能是什么?我如何修复它(构建选项?环境变量?)
感谢任何帮助。
答案 0 :(得分:1)
您使用的操作系统版本是什么?尝试将LD_PRELOAD设置为libssl的路径,例如:
export LD_PRELOAD=/lib/x86_64-linux-gnu/libssl.so.1.0.0
答案 1 :(得分:1)
不确定管道错误,但我遇到了_hdfs_2_0_0_cdh_4_3_0的问题(我的是hadoop的另一个版本,但我相信问题类似)。
setup.py脚本似乎想在/usr/local/lib/python2.7/dist-packages中为pydoop创建一个egg文件,但是安装程序要求它只是一个文件夹(具有_hdfs_2_0_0_cdh_4_3_0) .so文件)。
解决方案非常简单:只需删除/usr/local/lib/python2.7/dist-packages/pydoop-0.11.1.egg-info或等效版本。