Java, rJava 在 AWS EC2 for R 上安装(xlsx 和其他包)

Java, rJava install on AWS EC2 for R (xlsx and other packages)

我已经使用 Ubuntu 16.04.LTS 和 RStudio 重新激活了休眠的 Amazon EC2 微实例(请参阅下面的 sessionInfo() 输出)运行ning(感谢 AMI Louis Aslett).首先通过 ssh 连接到 AWS 实例后,我得到 运行 sudo apt-get update

当我尝试在 R Studio 中安装一些包(例如 xlsx 和其他包)时(由于缺少 Java,我遇到了一个错误,这似乎是一个常见问题)。我按照建议 1) 安装依赖项(例如 xlsx,如 rJava,和 xlsxjarsseparately; 2) apt-get install r-cran-rjava as suggested here。然后检查安装的 java -version 显示

openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-0ubuntu1.16.04.2-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

提出了类似的问题“" and here "error: unable to load installed packages...”,其中解决方案似乎是将java的路径链接到R export LD_LIBRARY_PATH=$JAVA_LD_LIBRARY_PATH或设置R的env。变量 Sys.setenv(JAVA_HOME='/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server').

然而,运行ning R CMD javareconf -e 揭示了(我想)一些更深层次的问题 (see Image) 和/或片段:

R CMD javareconf -e
Java interpreter : /usr/lib/jvm/default-java/jre/bin/java
Java version     : 1.8.0_131
Java home path   : /usr/lib/jvm/default-java
Java compiler    : not present
Java headers gen.: 
Java archive tool: 

trying to compile and link a JNI program 
detected JNI cpp flags    : 
detected JNI linker flags : -L$(JAVA_HOME)/jre/lib/amd64/server -ljvm
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG      -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c conftest.c -o conftest.o
conftest.c:1:17: fatal error: jni.h: No such file or directory
compilation terminated.
/usr/lib/R/etc/Makeconf:132: recipe for target 'conftest.o' failed
make: *** [conftest.o] Error 1
Unable to compile a JNI program

The following Java variables have been exported:
JAVA_HOME JAVA JAVAC JAVAH JAR JAVA_LIBS JAVA_CPPFLAGS JAVA_LD_LIBRARY_PATH
Running: /bin/bash

使用 Java 编译器:不存在且

conftest.c:1:17: fatal error: jni.h: No such file or directory compilation terminated. /usr/lib/R/etc/Makeconf:132: recipe for target 'conftest.o' failed

然后我发现了一个问题“how to make jni.h be found?”:这里推荐了最好的解决方案gcc -I/usr/lib/jvm/jdk1.7.0_07/include 检查同一目录 cd /usr/lib/jvm/ 并列出其内容 ls --all 显示:

.default-java
.java-1.8.0-openjdk-amd64.jinfo
..java-1.8.0-openjdk-amd64 java-8-openjdk-amd64

运行、gcc -I/usr/lib/jvm/java-1.8.0-openjdk-amd64/include 结果:gcc: fatal error: no input files 此外,我已经尝试 sudo apt-get install openjdk-X-jdk(这是建议的答案“how to make jni.h be found?”),但可能该包不再存在 "Unable to locate package openjdk-X-jdk"。

不幸的是,我被卡住了并且没有足够的技能来实现其他(看似更复杂的解决方案)。我真的很感激一些 help/input.

R version 3.3.1 (2016-06-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.1 LTS

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] parallel  compiler  stats     graphics  grDevices utils     datasets 
[8] methods   base     

other attached packages:
 [1] openxlsx_4.0.17        qdapTools_1.3.1        qdapRegex_0.7.2       
 [4] qdapDictionaries_1.0.6 stringr_1.1.0          stringi_1.1.2         
 [7] dplyr_0.5.0            tm_0.7-1               NLP_0.1-10            
[10] scales_0.4.0           RColorBrewer_1.1-2     ParallelForest_1.1.0  
[13] doMC_1.3.4             iterators_1.0.8        foreach_1.4.3         
[16] boot_1.3-18            reshape2_1.4.1         glmm_1.1.1            
[19] Matrix_1.2-6           mvtnorm_1.0-5          trust_0.1-7           
[22] ggplot2_2.1.0          shiny_0.13.2          

loaded via a namespace (and not attached):
 [1] gtools_3.5.0      slam_0.1-40       lattice_0.20-33  
 [4] colorspace_1.2-7  htmltools_0.3.5   chron_2.3-50     
 [7] XML_3.98-1.7      DBI_0.5-1         plyr_1.8.4       
[10] munsell_0.4.3     gtable_0.2.0      codetools_0.2-14 
[13] httpuv_1.3.3      gender_0.5.1      Rcpp_0.12.7      
[16] xtable_1.8-2      gdata_2.17.0      mime_0.5         
[19] gridExtra_2.2.1   digest_0.6.10     grid_3.3.1       
[22] tools_3.3.1       bitops_1.0-6      magrittr_1.5     
[25] RCurl_1.95-4.8    tibble_1.2        data.table_1.10.4
[28] assertthat_0.1    R6_2.2.0          igraph_1.0.1     

我的一个朋友建议使用 sudo apt-get install openjdk-8-jdk 在 ec2 实例上安装 java,有趣的是,它解决了问题。

您需要安装 JDK。也看看这里吧

http://www.owsiak.org/?p=3671

我在这里描述了如何使用 R、Java 和 rJava 包。尽管描述是基于 macOS 的,但它也应该适用于 Linux。这是非常通用的方法。

您的问题与您使用的是 JRE 而不是 JDK 有关。那里缺少 JNI headers。

两年太晚了,但对我有用的是遵循 link https://www.r-bloggers.com/installing-rjava-on-ubuntu/ 上的说明。在发表评论时,他们是:

# Install the Java Runtime Environment (JRE).
sudo apt-get install -y default-jre

# Install the Java Development Kit (JDK).
sudo apt-get install -y default-jdk

# Update where R expects to find various Java files.
sudo R CMD javareconf

# Install the package.
> install.packages("rJava")