java - 在 Hadoop 上运行时出现 NoSuchMethodError 而在本地运行时则不会

标签 java hadoop mapreduce

在 Hadoop 2.0.0-cdh4.3.1 上运行程序时,MapReduce 出现以下错误:

 java.lang.NoSuchMethodError:com.google.common.util.concurrent.Futures.withFallback

但是当我通过执行 JAR 进行测试时:

java -cp myclass

它运行完美。我在这里没有想法,好像 JAR 中存在所谓的 Futures.withFallback 这就是为什么它在本地执行的原因。它使用 Guava 连接 Cassandra,完整的堆栈跟踪如下:

attempt_201507081740_21115_m_000050_0: [FATAL] Child - Error running child : java.lang.NoSuchMethodError: com.google.common.util.concurrent.Futures.withFallback(Lcom/google/common/util/concurrent/ListenableFuture;Lcom/google/common/util/concurrent/FutureFallback;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ListenableFuture;
attempt_201507081740_21115_m_000050_0:  at com.datastax.driver.core.Connection.initAsync(Connection.java:176)
attempt_201507081740_21115_m_000050_0:  at com.datastax.driver.core.Connection$Factory.open(Connection.java:721)
attempt_201507081740_21115_m_000050_0:  at com.datastax.driver.core.ControlConnection.tryConnect(ControlConnection.java:244)
attempt_201507081740_21115_m_000050_0:  at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:190)
attempt_201507081740_21115_m_000050_0:  at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:78)
attempt_201507081740_21115_m_000050_0:  at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1272)
attempt_201507081740_21115_m_000050_0:  at com.datastax.driver.core.Cluster.init(Cluster.java:158)
attempt_201507081740_21115_m_000050_0:  at com.datastax.driver.core.Cluster.connect(Cluster.java:248)
attempt_201507081740_21115_m_000050_0:  at com.datastax.driver.core.Cluster.connect(Cluster.java:281)
attempt_201507081740_21115_m_000050_0:  at com.cassandra.CassandraHandler.getConnection(CassandraHandler.java:40)
attempt_201507081740_21115_m_000050_0:  at com.json.flatten.DynamicJsonFlattener.<init>(DynamicJsonFlattener.java:35)
attempt_201507081740_21115_m_000050_0:  at com.mapreduce.Map.map(Map.java:18)
attempt_201507081740_21115_m_000050_0:  at com.mapreduce.Map.map(Map.java:13)
attempt_201507081740_21115_m_000050_0:  at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:140)
attempt_201507081740_21115_m_000050_0:  at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:672)
attempt_201507081740_21115_m_000050_0:  at org.apache.hadoop.mapred.MapTask.run(MapTask.java:330)
attempt_201507081740_21115_m_000050_0:  at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
attempt_201507081740_21115_m_000050_0:  at java.security.AccessController.doPrivileged(Native Method)
attempt_201507081740_21115_m_000050_0:  at javax.security.auth.Subject.doAs(Subject.java:396)
 attempt_201507081740_21115_m_000050_0:  at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
attempt_201507081740_21115_m_000050_0:  at org.apache.hadoop.mapred.Child.main(Child.java:262)

Hadoop 版本有问题或任何其他版本冲突。 请有任何想法!

编辑:我已验证 Guava v18 JAR 中不存在“withFallback”方法。现在我一无所知,请帮我出出主意!

最佳答案

已编辑:没有看到您的堆栈跟踪。您的堆栈跟踪显示存在版本不匹配。您可以在文档中找到合适的兼容版本。

确保所需的 jar 文件在您的类路径中可用。

当您使用 -cp 选项运行时,您的 jvm 在所有由 ; 分隔的目录位置中搜索所需的 jar 文件。在您的类路径变量中给出。

确保您还添加了 ;.;在您的类路径中,这会导致 jvm 加载/搜索您当前工作目录中可用的类/jar 文件。

关于java - 在 Hadoop 上运行时出现 NoSuchMethodError 而在本地运行时则不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31603890/

相关文章:

hadoop - 如何在Hadoop中制作10G随机文本?

java - 从mapreduce解析并写入日志数据到hive

java - Eclipse编译错误: The hierarchy of the type 'Class name' is inconsistent

hadoop - Hadoop 集群 kerberized 时无法访问 HDFS

java - Intellij 想法 : How do I create custom Inspection rule with regexp

hadoop - 如何在命令行中使用 hive.cli.print.header=true 启动配置单元?

mapreduce - 您如何在 Couchbase 中按值对 _View_ 的结果进行排序?

hadoop - 在多节点集群上的 Hadoop 中运行字数统计示例时出现异常

java - Hibernate 查询集合中的多个项目

java - 尝试使用 ZipInputStream 验证 com.sun.xml.internal.org.jvnet.mimepull.DataHead.ReadMultiStream