在一台机器上使用提交火花的崩溃在不同机器上运行相同的JAR

时间:2019-11-27 09:03:06

标签: scala apache-spark play-json analytics-engine

我正在尝试使用spark-submit来运行JAR文件:

  1. 我的本地计算机(Mac OS)
  2. 另一台本地计算机(Windows)
  3. IBM Cloud Analytics Engine控制台

PS:它们都运行相同的SparkScala版本(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火花上运行时出现了错误:

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)

由于使用spark-submit在本地计算机上运行了相同的JAR文件,因此我不确定是什么导致了Google Analytics(分析)错误。

我也不需要指定库JAR,因为当我运行sbt assembly命令时,它们都已在可执行JAR中进行编译。

编辑1 :当我使用

运行时,还需要提及
java -jar <name of jar>

该程序在所有3台计算机上都成功执行,但是在使用spark-submit执行时,它在Analytics Engine上失败。我正在寻找与Oozie合作的时间表,这就是为什么让spark-submit在Analytics Engine上工作对我来说很重要。

1 个答案:

答案 0 :(得分:-1)

要使该作业在本地计算机上运行,​​您可能需要在spark提交中提供master Local [*],但是当您在其他计算机上运行时,我想可以用master yarn替换此命令。这对我有用。