Java, rJava 安装在 AWS EC2 for R (xlsx and other packages)

标签 java r amazon-web-services amazon-ec2 ubuntu-server

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

当我尝试在 R Studio 中安装一些包(例如 xlsx 和其他包)时(由于缺少 Java,我遇到了一个错误,这似乎是一个常见问题)。我按照建议 1) 安装依赖项(例如 xlsx,如 rJavaxlsxjars)separately ; 2) apt-get install r-cran-rjava 按照建议 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)

rJava load error in RStudio/R after “upgrading” to OSX Yosemite”和此处“error: unable to load installed packages...”提出了类似的问题,解决方案似乎是将 java 的路径链接到 R export LD_LIBRARY_PATH=$JAVA_LD_LIBRARY_PATH 或设置 R 的环境。变量 Sys.setenv(JAVA_HOME='/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server')

但是,运行 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?”中)但可能该包不再存在“无法找到包 openjdk- X-jdk”。

不幸的是,我被困住了并且不够熟练来实现其他(看似更复杂的解决方案)。我真的很感激一些帮助/输入。

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     

最佳答案

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

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

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

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

关于Java, rJava 安装在 AWS EC2 for R (xlsx and other packages),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44183179/

相关文章:

java - 触发链接但不更改页面内容

r - 将 3D 表面拟合到点数据集 [R]

python - 如何使用 Boto 将 UniqueRequestToken 传递给 AWS Mechanical Turk

http-headers - 无法删除响应 header 中的服务器(Amazon AWS)

r - 按因子的累积频率

javascript - 我在使用 Node js 对 dynamoDB 中的表执行更新操作时遇到 ConditionalCheckFailedException

java - 需要很多输入参数的构造函数

Java:为什么计算比赋值(int)更快?

java - 使用 com.google.common.base.Splitter 时出现 NoSuchMethodError 异常

r - R中knn函数中的cl参数是什么意思?