【问题标题】:NoSuchMethodError with SparkContextSparkContext 的 NoSuchMethodError
【发布时间】:2015-08-25 05:05:38
【问题描述】:

当我的 Spark 应用程序执行 val sc = new SparkContext("spark://spark01:7077", "Request Executor") 时,我得到一个 NoSuchMethodError。我正在使用 1.3.1 版和 Scala 2.10.4 版编译我的 Spark 应用程序。 Spark 集群使用 1.3.1 以及相同的 Scala 版本编译。

从 Spark 源代码来看,getTimeAsSeconds 在 Spark 1.4 之前不存在于 Utils.scala 中。为什么它试图调用我正在使用的版本中不存在的方法?

这是来自我的pom.xml 的依赖项:

<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-core_2.10</artifactId>
  <version>1.3.1</version>
</dependency>

<dependency>
  <groupId>org.scala-lang</groupId>
  <artifactId>scala-library</artifactId>
  <version>2.10.4</version>
</dependency>
<dependency>
  <groupId>org.scala-lang</groupId>
  <artifactId>scala-compiler</artifactId>
  <version>2.10.4</version>
</dependency>
<dependency>
  <groupId>org.scala-lang</groupId>
  <artifactId>scala-reflect</artifactId>
  <version>2.10.4</version>
</dependency>

<dependency>
  <groupId>com.twitter</groupId>
  <artifactId>util-eval_2.10</artifactId>
  <version>6.26.0</version>
</dependency>

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>19.0-rc1</version>
</dependency>

<dependency>
  <groupId>org.jvnet.jaxb2_commons</groupId>
  <artifactId>jaxb2-basics-runtime</artifactId>
<version>0.7.0</version>
</dependency>

<!-- Jackson JSON Library -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.4.4</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.4.4</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>2.4.4</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.module</groupId>
  <artifactId>jackson-module-jaxb-annotations</artifactId>
  <version>2.4.4</version>
</dependency>

<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-xml</artifactId>
</dependency>
<dependency>
  <groupId>org.codehaus.woodstox</groupId>
  <artifactId>woodstox-core-asl</artifactId>
  <version>4.1.4</version>
</dependency>

<dependency>
  <groupId>uk.org.simonsite</groupId>
  <artifactId>log4j-rolling-appender</artifactId>
  <version>20131024-2017</version>
</dependency>

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
</dependency>

<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-server</artifactId>
  <version>9.3.1.v20150714</version>
</dependency>

<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-servlet</artifactId>
  <version>9.3.1.v20150714</version>
</dependency>

<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-webapp</artifactId>
  <version>9.3.1.v20150714</version>
</dependency> 

<dependency>
  <groupId>org.antlr</groupId>
  <artifactId>antlr4-runtime</artifactId>
  <version>4.5</version>
</dependency>

<dependency>
  <groupId>org.apache.solr</groupId>
  <artifactId>solr-solrj</artifactId>
  <version>5.2.1</version>
</dependency>

<dependency>
  <groupId>org.apache.solr</groupId>
  <artifactId>solr-core</artifactId>
  <version>5.2.1</version>
  <exclusions>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
    </exclusion>
    <exclusion>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-util</artifactId>
    </exclusion>
  </exclusions>
</dependency>

我的依赖项中有什么东西导致我使用 Spark 1.4 进行编译吗?

堆栈跟踪:

java.lang.NoSuchMethodError: org.apache.spark.network.util.JavaUtils.timeStringAsSec(Ljava/lang/String;)J
        at org.apache.spark.util.Utils$.timeStringAsSeconds(Utils.scala:1027)
        at org.apache.spark.SparkConf.getTimeAsSeconds(SparkConf.scala:194)
        at org.apache.spark.util.AkkaUtils$.org$apache$spark$util$AkkaUtils$$doCreateActorSystem(AkkaUtils.scala:68)
        at org.apache.spark.util.AkkaUtils$$anonfun$1.apply(AkkaUtils.scala:54)
        at org.apache.spark.util.AkkaUtils$$anonfun$1.apply(AkkaUtils.scala:53)
        at org.apache.spark.util.Utils$$anonfun$startServiceOnPort$1.apply$mcVI$sp(Utils.scala:1991)
        at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:166)
        at org.apache.spark.util.Utils$.startServiceOnPort(Utils.scala:1982)
        at org.apache.spark.util.AkkaUtils$.createActorSystem(AkkaUtils.scala:56)
        at org.apache.spark.rpc.akka.AkkaRpcEnvFactory.create(AkkaRpcEnv.scala:245)
        at org.apache.spark.rpc.RpcEnv$.create(RpcEnv.scala:52)
        at org.apache.spark.SparkEnv$.create(SparkEnv.scala:247)
        at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:188)
        at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:267)
        at org.apache.spark.SparkContext.<init>(SparkContext.scala:424)
        at org.apache.spark.SparkContext.<init>(SparkContext.scala:155)
        at com.scala.analytics.RequestExecutor$.executeRequest(RequestExecutor.scala:23)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:735)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:816)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:583)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1113)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1047)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
        at org.eclipse.jetty.server.Server.handle(Server.java:517)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:302)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:238)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
        at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:57)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
        at java.lang.Thread.run(Thread.java:745)

【问题讨论】:

  • 您能否检查一下您在运行应用程序时使用了哪个 JAR?看起来您的 spark 确实是 1.4.0。如果您使用的是 Linux,请使用 find . -name *.jar | grep assembly(如果您自己编译代码,它应该在 ./assembly/target/scala-xxx 下)
  • 我的火花罐是:spark-assembly-1.3.1-hadoop2.6.0.jar.
  • 你从哪里得到源代码的?直接从github还是从网站?能否请您展示一下您用于编译 Spark 的命令?

标签: scala maven apache-spark


【解决方案1】:

事实证明这是一个愚蠢的错误。我在另一台机器上运行这个应用程序,所以每次编译时我都会复制我的目标目录。但是,我从来没有清理过远程机器上的目标目录,所以我有一个旧的 jar,里面放着 Spark 1.4.0,我曾经使用过它。每次我的应用程序运行时,它都会查找 Spark jar 并使用 1.4.0 jar 而不是目录中的 1.3.1 jar。解决方法就是删除旧的 (1.4.0) jar。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2019-02-23
    相关资源
    最近更新 更多