在Hadoop上运行时发生NoSuchMethodError,但在本地运行时不会发生 [英] NoSuchMethodError when running on Hadoop but not when run locally

查看:270
本文介绍了在Hadoop上运行时发生NoSuchMethodError,但在本地运行时不会发生的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Hadoop 2.0.0-cdh4.3.1上运行程序时MapReduce会给我下面的错误:

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

但是当我通过执行JAR :

  java -cp myclass 

它运行完美无瑕。我在这里没有想法,就好像所谓的 Futures.withFallback 存在于JAR中,这就是为什么它在本地执行。它使用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 /谷歌/普通/ util的/并行/ 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 co m.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:在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:在org.apache.hadoop.mapred.MapTask.run(MapTask.java:330)
attempt_201507081740_21115_m_000050_0:在org.apache.hadoop.mapred.Child $ 4。运行(Child.java:268)
attempt_201507081740_21115_m_000050_0:处于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)
请在org.apache.hadoop.mapred.Child.main(Child.java:262)



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

编辑:我已经验证,在Guava v18 JAR中没有withFallback方法。现在我无能为力,请帮助我提出任何想法! 解决方案

编辑:没有看到你的堆栈跟踪。你的堆栈跟踪显示有一个版本匹配失败。你可以在那里找到合适的兼容版本。



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



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



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

While running program on Hadoop 2.0.0-cdh4.3.1 MapReduce gives me below error :

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

But when I test by executing JAR :

java -cp myclass

It runs flawlessly. I am out of idea here as if so called Futures.withFallback is present in JAR thats why its got executed in local. Its using Guava for connecting Cassandra, full stack trace is below:

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)

Is something wrong with Hadoop version or any other version clash. Any ideas please!

EDIT: I have verified that there is no "withFallback" method present in Guava v18 JAR. Now I am clueless, please help me with any ideas !

解决方案

Edited: didn't saw your stacktrace. your stacktrace show that there is a version miss match. you can find appropriate compatible version on there documentations.

make sure that required jar files are available in your classpath.

when you are running using -cp option, your jvm searches for required jar file in all directory locations separated by ; given in your classpath variable.

make sure you have also added ;.; in your classes path, which causes the jvm to load/search class/jar files available in your current working directory as well.

这篇关于在Hadoop上运行时发生NoSuchMethodError,但在本地运行时不会发生的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆