我正在尝试使用spark-submit
on 运行 JAR 文件:
- 我的本地机器 (Mac OS)
- 另一台本地机器 (Windows)
- IBM Cloud 分析引擎控制台
PS:它们都运行相同的Spark
版本Scala
(Spark - 2.3.2 和 Scala - 2.11.12)
这是我的build.sbt
:
name := "CMDW-Security"
version := "19.11.25"
scalaVersion := "2.11.12"
libraryDependencies ++= Seq(
"org.scalaj" %% "scalaj-http" % "2.4.2",
"org.scalatest" %% "scalatest" % "3.0.5" % "test",
"com.typesafe.play" %% "play-json" % "2.7.3",
"org.passay" % "passay" % "1.5.0"
)
我在各处给出的运行 jar 文件的命令都是一样的:
spark-submit --master local[*] --deploy-mode client --class com.ibm.cmdwldap.executable.Test <jar-name>.jar
虽然它在两台本地计算机上都成功运行,但尝试在 Analytics Engine spark 上运行时出错,并带有以下崩溃日志:
Exception in thread "main" java.lang.NoSuchMethodError: play.api.libs.json.JsLookup$.apply$extension1(Lplay/api/libs/json/JsLookupResult;Ljava/lang/String;)Lplay/api/libs/json/JsValue;
at com.ibm.cmdwldap.restapi.Authorization.getAuthToken(Authorization.scala:41)
at com.ibm.cmdwldap.executable.Test$.main(Test.scala:18)
at com.ibm.cmdwldap.executable.Test.main(Test.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:904)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:198)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:228)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:137)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我不确定是什么导致 Analytics Engine 上出现此错误,因为相同的 JAR 文件使用spark-submit
.
我也不需要指定库 JAR,因为当我运行sbt assembly
命令时,它们都已编译到可执行 JAR 中。
编辑1:还需要提到,当我运行时
java -jar <name of jar>
该程序在所有 3 台机器上都成功执行,但是当使用 执行时spark-submit
,它在分析引擎上失败。我正在寻找与 Oozie 的日程安排,这就是为什么spark-submit
在 Analytics Engine 上工作对我来说很重要。