【问题标题】:How to connect to hdfs using pyarrow in python如何在 python 中使用 pyarrow 连接到 hdfs
【发布时间】:2019-11-06 16:15:46
【问题描述】:

我已经安装了pyarrow 并希望连接到 Hadoop 集群中的 hdfs 文件。我有以下行,它给了我错误。

 fs = pa.hdfs.connect(host='...', 50057, user='...', kerb_ticket='/tmp/krb5cc_0')

这是我收到的错误消息

ArrowIOError: Unable to load libhdfs

我应该如何安装libhdfs?我还需要做哪些其他依赖项/设置?

【问题讨论】:

    标签: python hadoop hdfs pyarrow


    【解决方案1】:
    pyarrow.hdfs.connect(host='default', port=0, user=None, kerb_ticket=None, driver='libhdfs', extra_conf=None)
    

    您必须确保libhdfs.so$HADOOP_HOME/lib/native$ARROW_LIBHDFS_DIR 中。

    对于HADOOP

    bash-3.2$ ls $ARROW_LIBHDFS_DIR
    examples libhadoop.so.1.0.0 libhdfs.a libnativetask.a
    libhadoop.a libhadooppipes.a libhdfs.so libnativetask.so
    libhadoop.so libhadooputils.a libhdfs.so.0.0.0 libnativetask.so.1.0.0
    

    我知道的最后一个版本是Hadoop 3.2.0

    您可以使用 DistributedCache 加载任何本机共享库,以分发和符号链接库文件。

    此示例向您展示如何分发共享库 mylib.so,并从 MapReduce 任务中加载它。 see informations

    1. 首先将库复制到HDFS:bin/hadoop fs -copyFromLocal mylib.so.1 /libraries/mylib.so.1

    2. 作业启动程序应包含以下内容:

      DistributedCache.createSymlink(conf); DistributedCache.addCacheFile("hdfs://host:port/libraries/mylib.so. 1#mylib.so", conf);

    3. MapReduce 任务可以包含:System.loadLibrary("mylib.so");

    注意:如果您下载或构建了本机 hadoop 库,则无需使用 DistibutedCache 使该库可用于您的 MapReduce 任务。

    【讨论】:

    • 所以我没有在运行 python 的机器上安装任何 hadoop 组件。我需要安装的最少 hadoop 库是多少?
    • bash-3.2$ ls $ARROW_LIBHDFS_DIR 示例 libhadoop.so.1.0.0 libhdfs.a libnativetask.a libhadoop.a libhadooppipes.a libhdfs.so libnativetask.so libhadoop.so libhadooputils.a libhdfs.so .0.0.0 libnativetask.so.1.0.0
    • 将hadoop-client jar文件复制到我的机器上就够了吗?
    • 你的意思是完整的hadoop安装只是为了访问hdfs?请记住,我正在尝试使用客户端访问 hadoop 集群,我需要知道需要在客户端上安装哪些依赖项
    猜你喜欢
    • 2019-12-21
    • 2020-07-12
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2019-04-23
    • 2020-03-18
    • 2022-08-12
    相关资源
    最近更新 更多