【问题标题】:spark-submit does not work with my jar located in hdfsspark-submit 不适用于我位于 hdfs 中的 jar
【发布时间】:2020-02-11 21:39:06
【问题描述】:

这是我的情况:

Apache Spark 版本 2.4.4

Hadoop 版本 2.7.4

我的应用程序 jar 位于 hdfs 中。

我的 spark-submit 看起来像这样:

/software/spark-2.4.4-bin-hadoop2.7/bin/spark-submit \
--class com.me.MyClass --master spark://host2.local:7077 \
--deploy-mode cluster \
hdfs://host2.local:9000/apps/myapps.jar

我收到此错误:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.tracing.SpanReceiverHost.get(Lorg/apache/hadoop/conf/Configuration;Ljava/lang/String;)Lorg/apache/hadoop/tracing/SpanReceiverHost;
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:634)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:619)
    at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:149)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2598)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2632)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2614)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370)
    at org.apache.spark.deploy.DependencyUtils$$anonfun$resolveGlobPaths$2.apply(DependencyUtils.scala:144)
    at org.apache.spark.deploy.DependencyUtils$$anonfun$resolveGlobPaths$2.apply(DependencyUtils.scala:139)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:35)
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
    at org.apache.spark.deploy.DependencyUtils$.resolveGlobPaths(DependencyUtils.scala:139)
    at org.apache.spark.deploy.DependencyUtils$$anonfun$resolveAndDownloadJars$1.apply(DependencyUtils.scala:61)
    at org.apache.spark.deploy.DependencyUtils$$anonfun$resolveAndDownloadJars$1.apply(DependencyUtils.scala:64)
    at scala.Option.map(Option.scala:146)
    at org.apache.spark.deploy.DependencyUtils$.resolveAndDownloadJars(DependencyUtils.scala:60)
    at org.apache.spark.deploy.worker.DriverWrapper$.setupDependencies(DriverWrapper.scala:96)
    at org.apache.spark.deploy.worker.DriverWrapper$.main(DriverWrapper.scala:60)
    at org.apache.spark.deploy.worker.DriverWrapper.main(DriverWrapper.scala)

请指点如何解决这个问题? 谢谢。

【问题讨论】:

  • 试试这个地址。 hdfs:///apps/myapps.jar
  • 拉穆纳斯,感谢您的回复。这不起作用,我继续收到同样的错误。

标签: apache-spark hadoop spark-submit


【解决方案1】:

无需将 jar 转移到集群中,您可以从具有可执行权限的本地 id 本身运行您的 jar。 构建应用程序后,将 .jar 传输到您的 unix 用户帐户并为其授予可执行权限。看看下面的火花提交:-

spark-submit --master yarn --deploy-mode cluster --queue default --files "你的属性文件的完整路径" --driver-memory 4G --num-executors 8 --executor-cores 1 --executor-memory 4G --class "主类名"
"您已转移到本地 unix id 的 jar 的完整路径"

如果需要,您可以使用其他 spark 提交配置参数。请注意,在某些版本中,如果涉及多个 spark 版本,则必须使用 spark2-submit 而不是 spark-submit。

【讨论】:

  • 能否请您详细说明我们如何运行 jar 以在集群模式下部署?
  • 我已经编辑了上面的答案,您可以看到我已将集群传递给部署模式标志,即 (--deploy-mode cluster) 。这将帮助您在集群模式下启动作业。
  • 正如您在我的原始帖子中看到的那样,我有 --deploy-mode 集群,但它不起作用。我无法通过 spark-submit 使其工作。但是,通过 Rest API 提交作业是有效的。
【解决方案2】:

--deploy-mode cluster 在这种情况下会有所帮助。将罐子带到集群将由纱线集群负责。

【讨论】:

    猜你喜欢
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多