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

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

 install.packages("h2o") 

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

 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行的代码触发的:

 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 

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

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

谢谢,最好!

您报告的错误说:

仅支持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它应该工作。

我按照这个post中的讨论来解决问题,尽管对某些人来说这不方便。

默认的java是1.8.x,因此一旦h2o可以使用,但是从R调用h2o导致调用版本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启动它可能会很烦人。