求助:在Azure Databricks中安装rJava时遭遇dyn.load文件找不到错误
我之前在Azure Databricks环境里安装rJava时,也碰到过完全一样的dyn.load找不到libjvm.so的报错,折腾了好几种方法才解决,给你整理几个亲测有效的方案:
方案1:临时修正JDK路径(单notebook生效)
报错的核心是系统找不到libjvm.so的正确路径,Databricks默认的JDK路径可能和你代码里写的不一致,先确认实际路径:
- 在R notebook单元格里运行以下命令,获取当前集群的JDK安装路径:
输出会类似system("update-alternatives --list java", intern=TRUE)/usr/lib/jvm/java-11-openjdk-amd64/bin/java,我们需要去掉末尾的/bin/java,得到JDK根目录(比如/usr/lib/jvm/java-11-openjdk-amd64) - 接着设置正确的环境变量,然后安装rJava:
# 替换成你查到的JDK根目录 Sys.setenv(JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64") Sys.setenv(LD_LIBRARY_PATH=paste0(Sys.getenv("JAVA_HOME"), "/lib/server")) install.packages("rJava") library(rJava)
方案2:用初始化脚本持久化配置(全集群生效)
如果不想每次重启notebook都重新设置环境变量,可以用集群初始化脚本提前配置:
- 创建一个名为
setup_rjava.sh的脚本,内容如下:#!/bin/bash # 自动获取当前默认JDK路径 export JAVA_HOME=$(update-alternatives --list java | head -1 | sed 's/\/bin\/java//') export LD_LIBRARY_PATH=$JAVA_HOME/lib/server # 写入系统配置文件,确保R会话能读取到 echo "export JAVA_HOME=$JAVA_HOME" >> /etc/profile.d/rjava.sh echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >> /etc/profile.d/rjava.sh - 把这个脚本上传到DBFS(比如
dbfs:/databricks/init/setup_rjava.sh) - 编辑你的Databricks集群,在初始化脚本选项中添加这个DBFS路径,重启集群后再安装rJava就不会再出现路径问题了。
方案3:切换到兼容的JDK版本
部分版本的rJava对JDK版本有要求(比如更兼容Java 8),如果你的集群默认用的是高版本JDK,可以尝试切换:
- 如果集群没有Java 8,先通过初始化脚本安装:
sudo apt-get update && sudo apt-get install -y openjdk-8-jdk - 在R notebook里切换到Java 8并设置环境变量:
system("sudo update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/bin/java", intern=TRUE) Sys.setenv(JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64") Sys.setenv(LD_LIBRARY_PATH="/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server") install.packages("rJava") library(rJava)
内容的提问来源于stack exchange,提问作者Naveen_Kumar
相关产品推荐
相关产品推荐

