从R调用时,h2o无法连接:Java版本不匹配

时间:2017-09-29 13:52:32

标签: java r macos h2o

h2o之前在我的笔记本电脑上工作,但我暂时没有使用它 (并在此期间安装了新包和更新的东西)。昨天我尝试使用它,但它没有用。我删除了R h2o已打包并且我已从头开始重新安装h2o

install.packages("h2o")

我尝试使用h2o运行h2o.init(),但它给了我这个错误

java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

Starting H2O JVM and connecting: ............................................................ 
[1] "localhost"
[1] 54321
[1] TRUE
[1] -1
[1] "Failed to connect to localhost port 54321: Connection refused"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (7) Failed to connect to localhost port 54321: Connection refused
[1] 7
Error in h2o.init() : H2O failed to start, stopping execution.

当我查看错误日志时,显示

Only Java 1.6-1.8 supported, version is 9

我试图寻找更多信息,我认为错误是由第1836行this code触发的:

if (version != null && !(version.startsWith("1.6") || version.startsWith("1.7") || version.startsWith("1.8"))) {
  System.err.println("Only Java 1.6-1.8 supported, version is " + version);
  return true;

所以似乎h2o正在检查以1.6,1.7和1.8开头的版本,但我的版本出于某种原因从9开始! 但是,在终端上,java -version给出了

openjdk version "1.8.0_121"
OpenJDK Runtime Environment (Zulu 8.20.0.5-macosx) (build 1.8.0_121-b15)
OpenJDK 64-Bit Server VM (Zulu 8.20.0.5-macosx) (build 25.121-b15, mixed mode)

which java给出了

/Users/myusername/anaconda3/bin/java

------------编辑-------

更多信息:/usr/libexec/java_home -V给出了

Matching Java Virtual Machines (4):
    9, x86_64:  "Java SE 9" /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
    1.8.0_144, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
    1.8.0_51, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home
    1.8.0_25, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home

这解释了9看到的h2o。我觉得奇怪的是它期望1.x.0,但版本只是9。无论如何,似乎我需要将h2o.init()命令指向1.8 java,但我无法弄清楚如何做到这一点。

我通常使用brew来安装大多数内容,但我从不使用java,所以我对这些版本一无所知。

谢谢,最好!

2 个答案:

答案 0 :(得分:2)

您报告的错误是:

  

仅支持Java 1.6-1.8,版本为9

好像你安装了Java 9,H2O尚不支持。使用兼容的Java版本,这将修复错误。

如果您不能或不想卸载Java 9,那么您需要通过设置JAVA_HOME环境变量告诉H2O您要使用哪个Java。首先,通过在shell中执行以下命令来获取Java 1.8的位置:

/usr/libexec/java_home -v 1.8

在我的Mac上,它显示了我:

/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home

您可以通过运行以下命令来检查R是否可以看到您的JAVA_HOME变量:Sys.getenv("JAVA_HOME")

如果那是空白的(如果你正在使用RStudio,可能就是这样),那么就必须做更多工作才能让R看到JAVA_HOME变量。您可以编辑~/.Renviron文件以添加JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home或您计算机上的任何位置。然后重新启动RStudio它应该可以工作。

答案 1 :(得分:1)

我按照讨论in this thread来解决问题,但对某些人来说不方便。

默认java是1.8.x,因此只有h2o可以使用,但从h2o调用R会导致版本9 java获得调用。

现在的(相当零散的)解决方案是从终端启动h2o服务器

cd h2o-3.14.0.3   #navigate to wherever you have the h2o installation
java -jar h2o.jar

运行正常,然后我从R链接它,而不启动h2o实例:

h2o.init(startH2O = FALSE) 

如果您从终端启动h2o可以正常工作(如果您正在使用群集可能是唯一的方法),这样可以正常工作,但如果您想要启动它可能会很烦人它来自RStudio