代码之家  ›  专栏  ›  技术社区  ›  chans.best

StormCrawler和Hortonworks 1.1.0.2.6.4.0-91之间的Commons日志版本冲突

  •  -1
  • chans.best  · 技术社区  · 7 年前

    我跟着 http://stormcrawler.net/getting-started/ 为拓扑生成jar文件的指南。在中使用storm命令运行拓扑时 readme 文件中,我在执行FetcherBolt时遇到以下错误。我在Hortonworks集群中安装了storm storm 1.1.0.2.6.4.0-91。无论是本地模式还是分布式模式,我都会遇到相同的异常。 我遇到以下异常

    JAVAlang.NoSuchMethodError:org。阿帕奇。平民日志记录。实施。LogFactoryImpl。handleThrowable(Ljava/lang/Throwable;)V位于组织。阿帕奇。平民日志记录。实施。LogFactoryImpl。org上的newInstance(LogFactoryImpl.java:568)。阿帕奇。平民日志记录。实施。LogFactoryImpl。位于org的getInstance(LogFactoryImpl.java:292)。阿帕奇。平民日志记录。实施。LogFactoryImpl。位于org的getInstance(LogFactoryImpl.java:269)。阿帕奇。平民日志记录。LogFactory。org上的getLog(LogFactory.java:685)。阿帕奇。http。连接ssl。抽象验证器。(AbstractVerifier.java:61)位于org。阿帕奇。http。连接ssl。AllowlHostNameVerifier。(AllowAllHostnameVerifier.java:44)位于org。阿帕奇。http。连接ssl。AllowlHostNameVerifier。(AllowAllHostnameVerifier.java:46)位于org。阿帕奇。http。连接ssl。SSL连接插座工厂。(SSLConnectionSocketFactory.java:146)位于org。阿帕奇。http。实施。conn.poolighttpclientconnectionmanager。位于org的getDefaultRegistry(poolighttpclientconnectionmanager.java:115)。阿帕奇。http。实施。conn.poolighttpclientconnectionmanager。(poolighttpclientconnectionmanager.java:122)位于com。digitalpebble。风暴爬虫。协议httpclient。HttpProtocol。(HttpProtocol.java:76)位于java。lang.Class。java上的forName0(本机方法)。lang.Class。com上的forName(Class.java:264)。digitalpebble。风暴爬虫。协议协议工厂。(ProtocolFactory.java:60)位于com。digitalpebble。风暴爬虫。闩取数螺栓。在org上准备(FetcherBolt.java:738)。阿帕奇。暴风雨守护进程。遗嘱执行人$fn\uu 9635$fn\uu 9648。在组织中调用(executor.clj:794)。阿帕奇。暴风雨util$async\u循环$fn\uu 557。在clojure调用(util.clj:482)。lang.AFn。在java上运行(AFn.java:22)。lang.Thread。运行(Thread.java:748)

    1 回复  |  直到 7 年前
        1
  •  0
  •   Julien Nioche    7 年前

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

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

    推荐文章