YARN上的RSparkling Spark错误(java.lang.ClassNotFoundException:water.fvec.frame)

时间:2018-08-28 08:32:10

标签: r scala apache-spark h2o sparklyr

我正在尝试设置R环境以在YARN群集上运行h2o算法。 (由于安全原因,无法访问Internet-在R Server上运行)

这是我当前的环境设置:

  • 火花版本:2.2.0.2.6.3.0-235(2.2)
  • master:YARN客户
  • 闪闪发光的版本:0.2.5
  • 苏打水:2.2.16
  • 水上版本:3.18.0.10
  • sparklyr版本:0.7.0

我检查了h2o_version表中的所有版本映射,但是在运行代码时仍然出现此错误:

options(rsparkling.sparklingwater.version = "2.2.16")
options(rsparkling.sparklingwater.location = "path to my sparkling water.jar") 

Sys.setenv(SPARK_HOME = "path to my spark") 
Sys.setenv(SPARK_VERSION = "2.2.0") 
Sys.setenv(HADOOP_CONF_DIR = "...") 
Sys.setenv(MASTER = "yarn-client") 

library(sparklyr) 
library(h2o) 
library(rsparkling) 

sc = spark_connect(master = Sys.getenv("SPARK_MASTER"), spark_home = Sys.getenv("SPARK_HOME"), version = Sys.getenv("SPARK_VERSION")) 
h2o_context(sc) 

R Server ERROR output: 
Error: java.lang.ClassNotFoundExecption: water.fvec.Frame 
       at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
...

我尝试过的事情:

  • 按照说明here
  • 重新安装h2o软件包和多次重试
  • 尝试使用不同版本的水和苏打水(分别为3.18.0.5和2.2.11)

我确定这不会是版本错误,因为我已经根据h2o_release_table()对其进行了匹配,如图所示。请帮助或指导我解决问题。

1 个答案:

答案 0 :(得分:0)

(已解决问题)

原来在我的spark-client路径的 / jar / 目录中还有另一个 sparkling-water-core_2.11-2.2.16.jar 文件,因此被直接读取为类路径条目的一部分,从而导致冲突。 (通过Spark UI Environment选项卡确认)我在Spark Classpath上玩得很顺利,所以我不得不请求删除文件。

这样做之后,问题已解决。我还用不同版本的苏打水JAR和h2o R软件包进行了测试。 (sw 2.2.11&h2o 3.18.0.5,sw 2.2.19&h2o 3.20.0.2)

options(rsparkling.sparklingwater.version = "2.2.16")
options(rsparkling.sparklingwater.location = "path to my sparkling water.jar") 

Sys.setenv(SPARK_HOME = "path to my spark") 
Sys.setenv(SPARK_VERSION = "2.2.0") 
Sys.setenv(HADOOP_CONF_DIR = "...") 
Sys.setenv(MASTER = "yarn-client") 

library(sparklyr) 
library(h2o) 
library(rsparkling) 

sc = spark_connect(master = Sys.getenv("SPARK_MASTER"), 
                   spark_home = Sys.getenv("SPARK_HOME"), 
                   version = Sys.getenv("SPARK_VERSION")) 
h2o_context(sc) 

回答我自己的问题有点尴尬,但是我希望这可以帮助其他有需要的人!