我想在使用h20库的spark上启动一个jar。我在intellij上创建了一个scala项目,并在src / scala中添加了一个包com.hw。然后我写了一个简单的Scala程序。
这是文件sbt
name := "h20prova"
version := "1.0"
scalaVersion := "2.12.1"
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-core_2.10" % "1.5.1",
"ai.h2o"%"sparkling-water-core_2.11"%"2.1.9")
项目可以毫无问题地查看其库。
我创建了一个指定主类com.hw.h20try的工件,并成功构建了工件。
然后我使用此命令在spark上启动了脚本
spark-submit --class "com.hw.h20try" h20prova.jar
并收到以下错误
java.lang.ClassNotFoundException: com.hw.h20try
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:229)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:695)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我很确定这是一个依赖性问题,因为我在使用Java时遇到了类似的问题,我解决了将编译后的jar添加到工件构建中的问题。但我似乎无法重新创建我在Scala上用Java做的事情。
还有另一种设置Scala项目并在几分钟内在Spark上运行的方法吗?
答案 0 :(得分:1)
您的scala版本(2.12.1)和软件包版本(2.10,2.11)不匹配。 scala版本2.12不支持spark。
scalaVersion := "2.12.1"
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-core_2.10" % "1.5.1",
"ai.h2o"%"sparkling-water-core_2.11"%"2.1.9")
所以你的依赖应该是这样的(如果你选择scala版本2.11)。
scalaVersion := "2.11.5"
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-core_2.11" % "1.5.1",
"ai.h2o"%"sparkling-water-core_2.11"%"2.1.9")
注册java.lang.ClassNotFoundException: com.hw.h20try
异常,确保使用sbt-assembly等插件创建了具有依赖关系的超级jar。
运行命令jar -tf h20prova.jar | grep h20try
以检查该类是否实际打包并在jar中可用。