You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PyArrow连接远程HDFS?遇到libjvm加载错误该怎么解决?

报错原因分析

你收到的OSError: Unable to load libjvm报错是因为PyArrow的HadoopFileSystemRPC接口底层依赖Java虚拟机,运行时会尝试加载JDK的libjvm.so动态库,你当前系统没有正确配置JDK环境变量,导致程序找不到该文件。
另外你代码里的host参数加了http://前缀也是错误的,RPC模式下不需要加协议前缀。

问题解决步骤

方案1:WebHDFS连接(推荐,无需本地安装Hadoop、JDK)

该方案通过HDFS开放的HTTP接口访问,完全不依赖本地Java和Hadoop环境,适配你的场景:

  • 首先确认远程HDFS集群已经开启WebHDFS功能,默认端口Hadoop2为50070,Hadoop3为9870
  • 修改代码如下:
from pyarrow import fs
# 端口替换为你集群实际的WebHDFS端口
hdfs = fs.WebHdfsFileSystem(host='172.16.1.7', port=50070)
# 测试列目录
print(hdfs.ls('/'))

方案2:RPC模式连接(需要本地配置Java、Hadoop)

如果你必须使用8020 RPC端口连接,按以下步骤配置:

  1. 首先定位libjvm.so路径,执行命令:
    find /usr -name "libjvm.so"
    记录输出的文件所在目录,例如/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.144/jre/lib/amd64/server/
  2. 配置环境变量,将以下内容写入~/.bashrc后执行source ~/.bashrc生效:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.144 # 替换为你本地JDK根目录
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/server:$LD_LIBRARY_PATH
# 下载同远程集群版本的Hadoop二进制包解压后,配置HADOOP_HOME
export HADOOP_HOME=/path/to/your/hadoop/directory
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH
  1. 修改原有代码去掉http前缀:
from pyarrow import fs
hdfs = fs.HadoopFileSystem('172.16.1.7', 8020)
关于是否需要安装本地Hadoop的说明

如果使用WebHDFS方案,完全不需要在本地安装Hadoop。如果使用RPC端口连接,则需要本地部署和远程集群版本一致的Hadoop二进制包,不需要启动本地Hadoop服务,仅需解压配置环境变量即可。

内容的提问来源于stack exchange,提问作者Joy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:36:03