91之间的java-commons日志记录版本冲突

pieyvz9o  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(459)

我跟着警察走http://stormcrawler.net/getting-started/ 在中使用storm命令运行拓扑时生成拓扑的jar文件的指南 readme 文件,在执行fetcherbolt时出现以下错误。我在hortonworks集群中安装了storm 1.1.0.2.6.4.0-91。无论是本地模式还是分布式模式,我都会得到相同的异常。我有以下例外
java.lang.nosuchmethoderror:org.apache.commons.logging.impl.logfactoryimpl.handlethrowable(ljava/lang/throwable;)v位于org.apache.commons.logging.impl.logfactoryimpl.newinstance(logfactoryimpl。java:568)在org.apache.commons.logging.impl.logfactoryimpl.getinstance(logfactoryimpl。java:292)在org.apache.commons.logging.impl.logfactoryimpl.getinstance(logfactoryimpl。java:269)在org.apache.commons.logging.logfactory.getlog(logfactory。java:685)在org.apache.http.conn.ssl.abstractverifier.(抽象验证器。java:61)在org.apache.http.conn.ssl.allowlHostNameVerifier。java:44)在org.apache.http.conn.ssl.allowlHostNameVerifier。java:46)在org.apache.http.conn.ssl.sslconnectionsocketfactory上。java:146)在org.apache.http.impl.conn.poolighttpclientconnectionmanager.getdefaultregistry(poolighttpclientconnectionmanager。java:115)在org.apache.http.impl.conn.poolighttpclientconnectionmanager.(poolighttpclientconnectionmanager。java:122)在com.digitalpebble.stormclawler.protocol.httpclient.httpprotocol.(httpprotocol。java:76)在java.lang.class.forname(类)中的java.lang.class.forname0(本机方法)。java:264)在com.digitalpebble.stormclawler.protocol.protocolfactory.(protocolfactory。java:60)在com.digitalpebble.stormclawler.bolt.fetcherbolt.prepare(fetcherbolt。java:738)在org.apache.storm.daemon.executor$fn\uu9635$fn\uu9648.invoke(executor。clj:794)在org.apache.storm.util$async\u loop$fn\u 557.invoke(util。clj:482)在clojure.lang.afn.run(afn。java:22)在java.lang.thread.run(线程。java:748)

hs1ihplo

hs1ihplo1#

这可能是因为从httpclient库继承的commons日志记录版本与apachestorm的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"

在crawler-conf.yaml文件中。注意,这并不能保证对commons日志的调用不会在其他地方发生。理想情况下,您希望解决依赖性问题,例如确保hortonworks使用与stormcrawler所需版本相同的版本。我们只支持storm的apache发行版。

相关问题