本文原文出处: 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。