【问题标题】:h2o failed to connect when called from R: Java version missmatch从 R 调用时 h2o 连接失败:Java 版本不匹配
【发布时间】:2018-03-11 10:41:27
【问题描述】:

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 行的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

这解释了h2o 看到的9。我觉得它期望 1.x.0 但版本只是 9 很奇怪。无论如何,似乎我需要将h2o.init() 命令指向1.8 java,但我不知道该怎么做。

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

谢谢,最好的!

【问题讨论】:

    标签: java r macos h2o


    【解决方案1】:

    我关注了in this thread 的讨论以找到问题的解决方案,尽管这对某些人来说并不方便。

    默认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 启动它可能会很烦人对离开。

    【讨论】:

      【解决方案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,它应该可以工作了。

      【讨论】:

      • 我显示我拥有的default java 是“1.8.0_121”。不确定 R 从哪里获得版本 9(并且,请注意,它似乎读取的是版本 9,而不是 1.9,所以我想知道那里是否存在问题)。
      • 好的,很抱歉我第一次错过了。我从您的最新编辑中看到您安装了多个 Java。你能uninstall Java 9 或更新你的路径以更喜欢 Java 8 吗?
      • 我将 $JAVA_HOME 更改为指向 /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home,但问题仍然存在。不知道怎么改h2o要调用的java!
      • 您是否使用 RStudio 而不是命令行 R?我注意到 RStudio 有时不会选择环境变量。您可以通过检查 Sys.getenv("JAVA_HOME") 来查看 R 是否知道 JAVA_HOME。如果为空,请尝试使用Sys.setenv("JAVA_HOME") 进行设置?这是在黑暗中拍摄,但可能会成功......
      • 是的,这就是关键!根据设计,RStudio 不会从 .bashrc 读取环境变量(不知道是什么原因)。请编辑您的答案以包含以下信息,我会接受它:)。首先用/usr/libexec/java_home -v 1.8获取1.8 java的位置。其次,使用该位置编辑~/.Renviron 并添加JAVA_HOME=your_java_1.8_location。重启RStudio就可以了!
      猜你喜欢
      • 1970-01-01
      • 2016-10-13
      • 2021-09-21
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      相关资源
      最近更新 更多