我按照http://stormcrawler.net/getting-started/指南生成拓扑的jar文件。当我在readme
文件中使用storm命令运行拓扑时,我在执行FetcherBolt时出现以下错误。我在Hortonworks集群中安装了风暴Storm 1.1.0.2.6.4.0-91。无论-local还是分布式模式,我都会得到相同的异常。
我得到了以下异常
java.lang.NoSuchMethodError:org.apache.commons.logging.impl.LogFactoryImpl.handleThrowable(Ljava / lang / Throwable;)V at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java: 568)在org.apache.com上的org.apache.commons .logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:292)或者org.apache.com上的org.apache.commons .logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:269) .logging.LogFactory.getLog(LogFactory.java:685)org.apache.http.conn.ssl.AbstractVerifier。(AbstractVerifier.java:61)at org.apache.http.conn.ssl.AllowAllHostnameVerifier。(AllowAllHostnameVerifier.java :44)org.apache.http.conn.ssl.AllowAllHostnameVerifier。(AllowAllHostnameVerifier.java:46)org.apache.http.conn.ssl.SSLConnectionSocketFactory。(SSLConnectionSocketFactory.java:146)org.apache.http。 impl.conn.PoolingHttpClientConnectionManager.getDefaultRegistry(PoolingHttpClientConnectionManager.java:115)at org.apache.http.impl.conn.PoolingHttpClientConnectionManager。(PoolingHttpClient ConnectionManager.java:122)at com.digitalpebble.stormcrawler.protocol.httpclient.HttpProtocol。(HttpProtocol.java:76)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java) :264)at com.digitalpebble.stormcrawler.protocol.ProtocolFactory。(ProtocolFactory.java:60)at com.digitalpebble.stormcrawler.bolt.FetcherBolt.prepare(FetcherBolt.java:738)at org.apache.storm.daemon.executor $ fn__9635 $ fn__9648.invoke(executor.clj:794)atg.apache.storm.util $ async_loop $ fn__557.invoke(util.clj:482)at clojure.lang.AFn.run(AFn.java:22)at java.lang.Thread.run(Thread.java:748)
答案 0 :(得分:0)
这可能是由于从httpclient库继承的commons-logging版本与Apache Storm的Hortonworks版本放在类路径上的版本之间存在冲突。
[INFO] +- org.apache.httpcomponents:httpclient:jar:4.5.3:compile
[INFO] | +- org.apache.httpcomponents:httpcore:jar:4.4.6:compile
[INFO] | +- commons-logging:commons-logging:jar:1.2:compile
[INFO] | \- commons-codec:commons-codec:jar:1.9:compile
您可以尝试通过设置
来使用不同的协议实现 http.protocol.implementation: "com.digitalpebble.stormcrawler.protocol.okhttp.HttpProtocol"
https.protocol.implementation: "com.digitalpebble.stormcrawler.protocol.okhttp.HttpProtocol"
。请注意,这并不能保证对commons-logging的调用不会发生在其他地方。理想情况下,您需要解决依赖性问题,例如确保Hortonworks使用与StormCrawler所需版本相同的版本。我们只支持Apache的Apache发行版。