Включить зависимости в jar топологии Storm

Я пытаюсь включить некоторые jar-файлы, требуемые моей топологией, в jar-файл, который я развертываю в Storm. Когда я создаю файл jar с помощью Ant с задачей manifestclasspath, я получаю следующий манифест:

Ant-Version: Apache Ant 1.9.5
Created-By: 1.8.0_45-b14 (Oracle Corporation)
Main-Class: org.softwarematters.storm.MyTopology
Class-Path: ../build/lib/kafka-clients-0.8.2.1.jar ../build/lib/kafka_
 2.11-0.8.2.1.jar ../build/lib/log4j-1.2.16.jar ../build/lib/metrics-c
 ore-2.2.0.jar ../build/lib/scala-library-2.11.5.jar ../build/lib/stor
 m-kafka-0.9.5.jar ../build/lib/zookeeper-3.4.6.jar

Пути в записи Class-Path выглядят неправильно. Топология развертывается успешно, но когда я отправляю данные в Kafka, я получаю ClassNotFoundException: storm.kafka.KafkaSpout в журналах Storm.

Я изменил манифест, чтобы он выглядел так:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.5
Created-By: 1.8.0_45-b14 (Oracle Corporation)
Main-Class: org.softwarematters.storm.MyTopology
Class-Path: . lib/kafka-clients-0.8.2.1.jar lib/kafka_2.11-0.8.2.1.jar
 lib/log4j-1.2.16.jar lib/metrics-core-2.2.0.jar lib/scala-library-2.1
 1.5.jar lib/storm-kafka-0.9.5.jar lib/zookeeper-3.4.6.jar

Это также успешно развертывается, но дает ту же ошибку, когда я пытаюсь передать сообщения.

Как я могу создать файл jar, который содержит эти зависимости и правильно работает в Storm? Я не хочу добавлять jar-файлы в каталог Storm lib, но это единственная рабочая конфигурация, которую я нашел.


person Patrick    schedule 14.09.2015    source источник
comment
Я не уверен, что Storm может обрабатывать вложенные файлы jar.   -  person Matthias J. Sax    schedule 14.09.2015
comment
Я использую Ант. По моему опыту, Maven просто добавляет сложности без соответствующей ценности.   -  person Patrick    schedule 15.09.2015


Ответы (1)


Очевидно, Матиас прав, и Storm не может обрабатывать вложенные файлы jar. Исправление состоит в том, чтобы распаковать файлы jar и включить файлы классов в jar топологии. Это потребовало двух изменений в моем файле Ant build.xml. Во-первых, поместите зависимости в промежуточный каталог и соберите из них одну банку:

  <target name="staging">
    <copy todir="${build.staging}">
      <fileset dir="${kafka.lib}">
        <include name="kafka-clients-0.8.2.1.jar"/>
        <include name="kafka_2.11-0.8.2.1.jar"/>
        <include name="log4j-1.2.16.jar"/>
        <include name="metrics-core-2.2.0.jar"/>
        <include name="scala-library-2.11.5.jar"/>
      </fileset>

      <fileset dir="${storm.kafka.lib}">
        <include name="storm-kafka-0.9.5.jar"/>
      </fileset>

      <fileset dir="${zookeeper.lib}">
        <include name="zookeeper-3.4.6.jar"/>
      </fileset>
    </copy>

    <jar jarfile="${staging.jar}">
      <zipgroupfileset dir="${build.staging}" includes="**/*.jar"/>
    </jar>
  </target>

Затем потяните эти файлы .class в банку топологии, за исключением манифестов:

<jar basedir="${build.root}"
     jarfile="${topology.jar}">
  <manifest>
    <attribute name="Main-Class" value="${topology.fullname}"/>
  </manifest>

  <zipfileset src="${staging.jar}" excludes="META-INF/**/*"/>
</jar>

Этот jar успешно развертывается в Storm.

person Patrick    schedule 15.09.2015
comment
можете ли вы помочь мне с этим stackoverflow.com/questions/32612810/ ? - person ; 19.09.2015