【问题标题】:spark 1.4.0 java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.elapsedMillis()J火花 1.4.0 java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.elapsedMillis()J
【发布时间】:2015-06-24 17:59:52
【问题描述】:

我正在使用 spark 1.4.0 / hadoop 2.6.0(仅用于 hdfs)并且在运行 Scala SparkPageRank 示例时(examples/src/main/scala/org/apache/spark/examples/SparkPageRank. scala),我遇到以下错误:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.elapsedMillis()J
    at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:245)
    at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:313)
    at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:207)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217)
    at scala.Option.getOrElse(Option.scala:120)
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:217)
    at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:32)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217)
    at scala.Option.getOrElse(Option.scala:120)
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:217)
    at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:32)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217)
    at scala.Option.getOrElse(Option.scala:120)
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:217)
    at org.apache.spark.rdd.RDD$$anonfun$distinct$2.apply(RDD.scala:329)
    at org.apache.spark.rdd.RDD$$anonfun$distinct$2.apply(RDD.scala:329)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:147)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:108)
    at org.apache.spark.rdd.RDD.withScope(RDD.scala:286)
    at org.apache.spark.rdd.RDD.distinct(RDD.scala:328)
    at org.apache.spark.examples.SparkPageRank$.main(SparkPageRank.scala:60)
    at org.apache.spark.examples.SparkPageRank.main(SparkPageRank.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:497)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:621)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:170)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:193)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:112)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

我对java不是很熟悉,但是好像是guava版本问题

以下信息可能会有所帮助:

$ find ./spark -name *.jars | grep guava
./lib_managed/bundles/guava-16.0.1.jar
./lib_managed/bundles/guava-14.0.1.jar

examples/pom.xml 文件的一部分:

...
 <dependency>
      <groupId>org.apache.cassandra</groupId>
      <artifactId>cassandra-all</artifactId>
      <version>1.2.6</version>
      <exclusions>
        <exclusion>
          <groupId>com.google.guava</groupId>
          <artifactId>guava</artifactId>
        </exclusion>
...

确实,该类似乎不包含有问题的方法:

$ javap -p /mnt/spark/examples/target/streams/\$global/assemblyOption/\$global/streams/assembly/7850cb6d36b2a6589a4d27ce027a65a2da72c9df_5fa98cd1a63c99a44dd8d3b77e4762b066a5d0c5/com/google/common/base/Stopwatch.class

Compiled from "Stopwatch.java"
public final class com.google.common.base.Stopwatch {
  private final com.google.common.base.Ticker ticker;
  private boolean isRunning;
  private long elapsedNanos;
  private long startTick;
  public static com.google.common.base.Stopwatch createUnstarted();
  public static com.google.common.base.Stopwatch createUnstarted(com.google.common.base.Ticker);
  public static com.google.common.base.Stopwatch createStarted();
  public static com.google.common.base.Stopwatch createStarted(com.google.common.base.Ticker);
  public com.google.common.base.Stopwatch();
  public com.google.common.base.Stopwatch(com.google.common.base.Ticker);
  public boolean isRunning();
  public com.google.common.base.Stopwatch start();
  public com.google.common.base.Stopwatch stop();
  public com.google.common.base.Stopwatch reset();
  private long elapsedNanos();
  public long elapsed(java.util.concurrent.TimeUnit);
  public java.lang.String toString();
  private static java.util.concurrent.TimeUnit chooseUnit(long);
  private static java.lang.String abbreviate(java.util.concurrent.TimeUnit);
}

我想更好地理解这个问题,如果可能的话,学习如何解决它:-)

【问题讨论】:

    标签: java scala apache-spark guava


    【解决方案1】:

    方法 elapsedMilis() 已在 Guava 16 中删除。(或计划删除 - 无论如何,您的列表中没有使用此名称的方法。)

    据我记得在 guava 16 中应该有类似 TimeUnit.MILLISECONDS 的东西,或者您可以通过 divading 1000000000.0 手动转换。

    【讨论】:

    • 好消息,谢谢。但是,我正在寻找的答案是为什么我正在使用的 hadoop/spark 组合不起作用,以及我可以做些什么来修复它或升级它。
    • 在 pom.xml 中排除意味着(或多或少)您在构建项目时没有将指定的 jar 添加到类路径中。也许这就是问题?所以也许你应该删除排除部分?可能是该应用程序忽略了旧版本的库吗?尝试阅读主题的maven文档:maven.apache.org/guides/introduction/…
    • 公平起见,我会将您的答案标记为已接受!我现在正在使用并且似乎正在运行的设置是 spark 1.4.0 和 hadoop 2.5.2,使用的是预构建的 spark 版本。
    【解决方案2】:

    尝试将 Hadoop 从 2.6.0 升级到 2.6.5。就我而言,它在使用 HBaseAdmin.tableExists 函数(其他依赖项:Hbase 1.2.0、Spark 2.0.1、Scala 2.11.8)时解决了 Stopwatch 的问题,尽管 Hbase 中此问题的解决方案计划在1.3.0,目前无法用于生产link

    【讨论】:

      【解决方案3】:

      我使用的是 Spark 2.4.4,但仍然有这个问题!无论如何,我真的不需要查看此日志记录输出,因此我只是更改了相关类的日志记录级别:

       <logger name="org.apache.hadoop.mapred.FileInputFormat" level="INFO" additivity="false">
          <appender-ref ref="CONSOLE"/>
      </logger>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-13
        • 1970-01-01
        • 2017-04-12
        • 1970-01-01
        • 2021-06-12
        • 2023-03-09
        • 2020-04-05
        相关资源
        最近更新 更多