Spark无法通过spark-submit定位客户端程序

时间:2019-06-01 22:38:13

标签: apache-spark apache-spark-sql sparkcore

我正在尝试将spark作业部署到spark集群中,并面临类加载的问题。

错误详细信息如下:

java.lang.ClassNotFoundException: org.examples.datasets.FlightDataProcessor
        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:238)
        at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:810)
        at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167)
        at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195)
        at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
        at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:924)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
19/06/02 06:26:11 INFO ShutdownHookManager: Shutdown hook called

当前,我必须将应用程序jar复制到spark jars文件夹中,作为部署脚本的一部分来解决此问题。

但是我相信spark-submit驱动程序应该已经聪明地完成了这件事,因为每次我想要部署一些Spark作业时,我都需要将所有客户端程序复制到jars上,这根本不方便

环境信息:

火花版本:2.11-2.4.3

Scala版本:2.11.8

这是我的源代码的链接:

部署脚本

https://github.com/anhtv08/spark-cassandra-example/blob/master/scripts/submit_spark_flight_job.sh

火花作业代码

https://github.com/anhtv08/spark-cassandra-example/blob/master/src/main/scala/org/examples/datasets/FlightDataProcessor.scala

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

由于可用的代码是jar的一部分,因此我们可以将jar上载到hdfs或maven仓库中,并使用以下任一选项。
* --jars/spark.jars-我们可以指定上传到HDFS的jar的路径。
* --packages/spark.jars.packages-如果我们能够将jar上载到Maven仓库,我们可以指定Maven坐标(此外,我们还需要指定关于Maven仓库的Spark凭证)