Установка Java, rJava на AWS EC2 для R (xlsx и другие пакеты)

Я повторно активировал свой бездействующий микроэкземпляр Amazon EC2 с запущенными Ubuntu 16.04.LTS и RStudio (см. Вывод sessionInfo() ниже) (благодаря AMI от Луи Аслетт). После ssh-подключения к экземпляру AWS сначала я запустил sudo apt-get update.

Когда я попытался установить некоторые пакеты (например, xlsx и другие) в R Studio (у меня возникла ошибка из-за отсутствия Java, что, похоже, является распространенной проблемой). Я последовал советам: 1) установить зависимости (например, xlsx как rJava и xlsxjars) отдельно; 2) apt-get install r-cran-rjava как предлагается здесь. Потом проверка установленного java -version показала

openjdk версии "1.8.0_131"
Среда выполнения OpenJDK (сборка 1.8.0_131-8u131-b11-0ubuntu1.16.04.2-b11)
64-разрядная серверная виртуальная машина OpenJDK (сборка 25.131-b11, смешанный режим)

Были предложены аналогичные проблемы "ошибка загрузки rJava в RStudio / R после «обновления» до OSX Yosemite "и здесь" ошибка: невозможно загрузить установленные пакеты ...", где решение, казалось, связывало путь 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').

Однако запуск R CMD javareconf -e выявил (я полагаю) некоторые более глубокие проблемы (см. Изображение) & / или фрагмент:

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: фатальная ошибка: jni.h: компиляция такого файла или каталога не завершена. / usr / lib / R / etc / Makeconf: 132: рецепт для цели 'conftest.o' не удалось

Затем я нашел вопрос «​​как найти jni.h? ": здесь предложено лучшее решение 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 (он был среди предложенных ответов "как сделать так, чтобы jni.h был найден?"), но, вероятно, пакет больше не существует "Невозможно найти пакет 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     


person mmatt    schedule 25.05.2017    source источник
comment
Хотя обычно я не рекомендую использовать другой инструмент, не могли бы вы вместо этого рассмотреть вариант использования пакета readxl? Он не зависит от Java и, таким образом, позволяет избежать всех этих головных болей.   -  person cdeterman    schedule 25.05.2017
comment
Спасибо за ответ и хорошую идею. На самом деле, я хочу запустить блестящее приложение, и моя (настоящая) проблема не в xlsx, а в qdap.   -  person mmatt    schedule 26.05.2017


Ответы (3)


Вам необходимо установить JDK. Взгляните и сюда.

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

где я описываю, как играть с пакетами R, Java и rJava. Несмотря на то, что описание основано на macOS, оно также должно работать с Linux. Это довольно общий подход.

Ваша проблема связана с тем, что вы используете JRE вместо JDK. Заголовки JNI там отсутствуют.

person Oo.oO    schedule 07.06.2017
comment
Спасибо за проницательный сайт. - person mmatt; 19.06.2017

Мой друг предложил установить java на экземпляр ec2, используя sudo apt-get install openjdk-8-jdk, и, что интересно, это решило проблему.

person mmatt    schedule 01.06.2017

На два года слишком поздно, но у меня сработало следование инструкциям по этой ссылке 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")

person CorerMaximus    schedule 10.12.2019