5

我正在尝试在 RHEL6 (6.4) 上设置 R 和 Tomcat

我已经安装了 R 并且可以运行它。我已经安装了 Tomcat 7 并且可以托管文件文件。我已将应用程序打包为 WAR 文件并使用 tomcat 部署它。该应用程序在所有方面都运行良好,直到它使用任何 R 组件。

如 catalina.out 中所示,这是它崩溃并出现以下错误的地方:

Cannot find JRI native library!
Please make sure that the JRI native library is in a directory listed in java.li
brary.path.

java.lang.UnsatisfiedLinkError: /usr/local/lib64/R-2.15.3/library/rJava/jri/libj
ri.so: libR.so: cannot open shared object file: Too many levels of symbolic link
s
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1750)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1675)
at java.lang.Runtime.loadLibrary0(Runtime.java:840)
at java.lang.System.loadLibrary(System.java:1047)
at org.rosuda.JRI.Rengine.<clinit>(Rengine.java:19)

我确实在 R 下安装了 rJava: install.packages("rJava") 它安装得很好,我在 R 的库文件夹中有 rJava。

我在 /etc/profile 中定义了以下内容:

export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre
export R_HOME=/usr/local/lib64/R-2.15.3
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$R_HOME/bin
export PATH
export LD_LIBRARY_PATH=$R_HOME/lib/libR.so,$JAVA_HOME/lib/amd64/server/libjvm.so

据我了解,这应该为服务器上的所有用户全局设置 JAVA_HOME、R_HOME、PATH 和 LD_LIBRARY_PATH。我知道 Tomcat 在 root 下运行,我可以确认 root 能够通过“ echo $JAVA_HOME”、“ echo $R_HOME”、“ echo $LD_LIBRARY_PATH”、“ echo $PATH”看到上面设置的所有路径

所以我不确定为什么它抱怨它无法打开那些 .so 文件。

此外,当它崩溃时,它会关闭 Tomcat。

谢谢!

4

2 回答 2

3

当我将 R 库与 tomcat 一起使用时,我遇到了同样的问题。它找不到 R_HOME。

解决方案是更新一个设置tomcat路径的文件,因为tomcat设置了自己的变量。该文件是“yourPathToTomcat/tomcat/bin/setclasspath.sh”,打开它并在末尾添加“export R_HOME=yourPathToR”(就像您在 linux 环境中添加的一样,例如:export R_HOME=/usr/lib/R) . 然后你可以运行你的应用程序,它会工作。希望它可以帮助某人。:D

于 2015-08-28T10:03:52.923 回答
2

要在 Java 中使用 R,您需要安装 JRI。幸运的是,JRI 现在是 rJava 的一部分并随它一起安装。

JRI 将需要它自己的本地共享库,该共享库已经与 rJava 一起安装。要找到使用 rJava 安装的 JRI,请使用

    system.file("jri",package="rJava")

从 R [命令行] 内部。上面的命令会给你一个路径。您将能够找到

libjri.so

这是 JRI 正在寻找的共享库。您可以将上面通过 JAVA_OPTS 检索到的路径指定为

    -Djava.library.path=${path-retrieved-from-R}

这将在 Tomcat 初始化时传递给 JVM 设置。

如果您使用多个库,请相应地对库路径 java 选项进行分组。

于 2013-04-05T08:51:01.727 回答