【问题标题】:pyarrow: non-legacy filesystem cannot connect, even though legacy canpyarrow:非传统文件系统无法连接,即使传统可以
【发布时间】:2020-09-14 08:20:06
【问题描述】:

当尝试使用 pyarrow 包(版本 0.17.1)中的非旧数据集时,我在连接到 hdfs 时收到 OSError: HDFS connection failed 错误。但是,当我使用旧版时,我可以毫无问题地建立连接。

即波纹管工作:

filesystem = pa.hdfs.connect(host = 'host_name', kerb_ticket = path_to_kerb_ticket_cache, port = 0)

但事实并非如此:

filesystem = pa.fs.HadoopFileSystem(host = 'host_name', kerb_ticket = path_to_kerb_ticket_cache, port = 0)

此外,如果我首先使用传统方式创建连接,然后尝试使用非传统方式连接,一切正常:

filesystem = pa.hdfs.connect(host = 'host_name', kerb_ticket = path_to_kerb_ticket_cache, port = 0)
filesystem = pa.fs.HadoopFileSystem(host = 'host_name', kerb_ticket = path_to_kerb_ticket_cache, port = 0)

知道如何正确使用 pa.fs.HadoopFileSystem 吗?

【问题讨论】:

    标签: python pyarrow


    【解决方案1】:

    当您使用旧版连接功能并将主机输入为default 时,它会采用来自core-site.xml 的默认主机(默认FS)。新的 HadoopFileSystem 调用不会执行此操作。手动将主机输入HadoopFileSystem 为我修复了它。

    例如在这部分进入主机

    fs.HadoopFileSystem(host='hdfs://your-hdfs-host' ...)

    而不是输入default

    fs.HadoopFileSystem(host='default' ...)

    【讨论】:

    • 我按照您的建议尝试使用 host='hdfs://your-hdfs-host',但没有帮助
    • 您是否将your-hdfs-host 替换为您的实际主机?您可以在core-site.xml 中的defaultFS 下找到它。
    • 我做了,但我今天才回到这个问题,结果发现我们没有正确配置 CLASSPATH 变量。将它设置为 hadoop 类路径 --glob 解决了这个问题(我猜你是否必须使用 hdfs 类路径 --glob 或 hadoop 类路径 --glob,如文档所建议的,取决于你的系统是如何配置的)。
    • 啊,是的,我还必须设置类路径。很高兴你把它整理好了。
    • 我希望他们刚刚在文档中提到,非旧版方式错过了旧版中的一些魔力,这意味着现在您必须设置类路径,而以前可以让它在没有的情况下工作这一步
    猜你喜欢
    • 2018-12-04
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2013-03-24
    • 2019-10-15
    • 2018-07-20
    • 1970-01-01
    相关资源
    最近更新 更多