【问题标题】:Commons logging version conflict between StormCrawler and Hortonworks 1.1.0.2.6.4.0-91StormCrawler 和 Hortonworks 1.1.0.2.6.4.0-91 之间的 Commons 日志记录版本冲突
【发布时间】:2018-04-06 13:44:01
【问题描述】:

我按照http://stormcrawler.net/getting-started/ 指南生成拓扑的jar 文件。当我在readme 文件中使用storm 命令运行拓扑时,在执行FetcherBolt 时出现以下错误。我在 Hortonworks 集群中安装了 Storm Storm 1.1.0.2.6.4.0-91。无论 -local 或分布式模式,我都会得到相同的异常。 我得到了以下异常

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:269) 在 org.apache.commons 的 org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:292) .logging.LogFactory.getLog(LogFactory.java:685) 在 org.apache.http.conn.ssl.AbstractVerifier.(AbstractVerifier.java:61) 在 org.apache.http.conn.ssl.AllowAllHostnameVerifier.(AllowAllHostnameVerifier.java :44) 在 org.apache.http.conn.ssl.SSLConnectionSocketFactory 的 org.apache.http.conn.ssl.AllowAllHostnameVerifier.(AllowAllHostnameVerifier.java:46).(SSLConnectionSocketFactory.java:146) 在 org.apache.http。 impl.conn.PoolingHttpClientConnectionManager.getDefaultRegistry(PoolingHttpClientConnectionManager.java:115) 在 org.apache.http.impl.conn.PoolingHttpClientConnectionManager.(PoolingHttpClient ConnectionManager.java:122) 在 com.digitalpebble.stormcrawler.protocol.httpclient.HttpProtocol.(HttpProtocol.java:76) 在 java.lang.Class.forName0(Native Method) 在 java.lang.Class.forName(Class.java :264) 在 com.digitalpebble.stormcrawler.protocol.ProtocolFactory.(ProtocolFactory.java:60) 在 com.digitalpebble.stormcrawler.bolt.FetcherBolt.prepare(FetcherBolt.java:738) 在 org.apache.storm.daemon.executor $fn__9635$fn__9648.invoke(executor.clj:794) at org.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)

【问题讨论】:

    标签: java web-crawler apache-storm stormcrawler


    【解决方案1】:

    这可能是由于继承自 httpclient 库的 commons-logging 版本与 Hortonworks 版本的 Apache Storm 放在类路径中的版本之间存在冲突。

    [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-logging 的调用不会发生在其他地方。理想情况下,您希望解决依赖问题,例如通过确保 Hortonworks 使用与 StormCrawler 所需的版本相同的版本。我们仅支持 Storm 的 Apache 发行版。

    【讨论】:

    • 进入 yaml 解决了这个问题。我们的爬虫将部署在我们现有的基础设施上,因此需要看看我们是否可以升级 hortonworks 中的storm,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2013-03-26
    • 2011-07-04
    相关资源
    最近更新 更多