0

我能够毫无错误地构建和安装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.

那么这个错误的原因可能是什么?我该如何修复它(构建选项?环境变量?)

任何帮助表示赞赏。

4

2 回答 2

1

您使用的是什么操作系统版本?尝试将 LD_PRELOAD 设置为您的 libssl 的路径,例如:

export LD_PRELOAD=/lib/x86_64-linux-gnu/libssl.so.1.0.0
于 2013-10-29T10:32:25.670 回答
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 或您版本的等效版本。

于 2014-03-07T18:56:01.267 回答