本文原文出处: http://blog.csdn.net/bluishglc/article/details/50443205 严禁不论什么形式的转载。否则将托付CSDN官方维护权益。
2015年的最后一篇博文了,本想着来个年终总结,终究还是没能打破惯例。在技术博客上写一篇非技术博文,所以这2015年的最后一篇文章是关于一个非常小非常小的小问题,为啥没准备一篇宏篇大论呢?近期忙的跟鬼似的,赶哪算哪吧,就是它了:
Storm和Cassandra集成,提交topology后报错:
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;
这个问题的解决办法是Strorm和Cassandra使用的guava版本号不一致引起的。Strom (V0.10 ) 依赖了一个低版本号的guava ( V11.0.2 ), 这个版本号还没有提供错误中指明的方法。可是Cassandra ( V 2.1.6 ) 的driver client使用的却是一个提供了该方法的高版本号guava ( V14.0.1 )。
Storm的应用是将全部依赖jar打成单一jar包部署的,非常显然,提交topology之后。storm终于採纳的是strom自身配置在STORM_HOME/extlib-daemon/下的低版本号guava,从而导致了这个错误。
解决方法就是使用高版本号的guava替换STORM_HOME/extlib-daemon/下的低版本号guava。