2013-07-23 2 views
3

Я пытаюсь скомпилировать и запустить проект ливневой Кафка-стартер на https://github.com/TheHydroImpulse/storm-kafka-starterKafkaSpout BrokerHosts ошибка

Основная функция для KafkaTopology выглядит следующим образом:

public class KafkaTopology { 

    public static void main(String[] args) throws Exception { 

    List<String> hosts = new ArrayList<String>(); 
    hosts.add("localhost"); 
    SpoutConfig kafkaConf = new SpoutConfig(StaticHosts.fromHostString(hosts,1), 
             "test-topic","/kafkastorm","discovery"); 
    kafkaConf.scheme = new SchemeAsMultiScheme(new StringScheme()); 
    kafkaConf.forceStartOffsetTime(-2); 
    TopologyBuilder builder = new TopologyBuilder(); 
    builder.setSpout("spout", kafkaSpout, 2); 
    builder.setBolt("printer", new PrinterBolt()).shuffleGrouping("spout"); 

    Config config = new Config(); 
    config.setDebug(true); 

    if(args!=null && args.length > 0) { 
     config.setNumWorkers(3); 
     StormSubmitter.submitTopology(args[0], config, builder.createTopology()); 
    } 
    else {   
     config.setMaxTaskParallelism(3); 
     LocalCluster cluster = new LocalCluster(); 
     cluster.submitTopology("kafka", config, builder.createTopology()); 

     Thread.sleep(10000); 

     cluster.shutdown(); 
    } 
    } 
} 

Сосуд компилирует с использованием Maven. Но на управление топологией, я получаю ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError:  
storm/kafka/KafkaConfig$BrokerHosts 
at java.lang.Class.getDeclaredMethods0(Native Method) 
at java.lang.Class.privateGetDeclaredMethods(Class.java:2451) 
at java.lang.Class.getMethod0(Class.java:2694) 
at java.lang.Class.getMethod(Class.java:1622) 
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) 
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) 
Caused by: java.lang.ClassNotFoundException: storm.kafka.KafkaConfig$BrokerHosts 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
... 6 more 

Локальное хранилища действительно есть BrokerHosts в банке ливневой Кафка и я импортировал библиотеку KafkaConfig в моем файле Java. Я не могу понять причину ошибки. Мы ценим любые предложения.

ответ

1

Я прошел через группы штурмовых пользователей и проблемы на странице github-kastka-starter github. Оказывается, что ошибка происходит из-за двух причин:

  1. Версия несовместимость между версиями штормовой, Кафки и Кафка шторм
  2. Отсутствующие банки на пути к классам

Моя начальная установка не работает даже после включения всех необходимых банок зависимости в папке/storm/lib. Оказывается, упомянутый проект storm-kafka-starter работает только для версий storm 0.9.x.

Также см поста здесь, на которой работает установка лучше всего - https://groups.google.com/d/msg/storm-user/V_j_JZmFsb4/E4_II9ork3UJ

1

Я прошел через те же интеграционные беды. Наконец, вместе взятый рабочий пример.

Вы можете проверить его здесь> https://github.com/buildlackey/cep

(нажмите на каталог штормовых + Кафка для примера программы, которая должна получить вас и работает).

0

Мне не удалось исправить команду сборки maven. Использование

mvn clean install assembly:assembly 

и с использованием банки с зависимостями исправлено.

2

У меня были похожие проблемы, используя 0.9.2_incubating версию Apache Storm.

Исход обусловлен тем, что фактическое распределение штормов не имеет библиотек kafka в папке/lib. Я был в состоянии устранить ошибку, копируя следующие библиотеки (которые я использовал для компиляции & создания топологии) в Lib папки/с, где я побежал Сторм

  • ливневой Кафка-0.9.2-incubating.jar
  • kafka_2.10-0.8.1.1.jar
  • библиотека Scala-2.10.1.jar

Помните, что фактические версии в вашем случае может отличаться. Возьмите те, которые вы используете, чтобы построить свою топологию шторма (т. Е. От .m2 или.папка зависимостей gradle)

Примечание: Я не использую тот же самый проект стартера, упомянутый выше, но исправление будет аналогичным.

+1

У вас было бы то, что было бы исправлено год спустя, но с 'apache-storm-0.10.0-beta' и' kafka_2.10-0.8.2.0' (версия, рекомендуемая с соответствующих страниц загрузки), тогда это по-прежнему лучший ответ .. однако я в конечном итоге копировал все из «внешних», а не только «штормовой кафки» .... – Soren

0

Измененное pom.xml из

<dependency> 
    <groupId>org.apache.storm</groupId> 
    <artifactId>storm-kafka</artifactId> 
    <version>1.0.2</version> 
    <scope>provided</scope> 
</dependency> 

в

<dependency> 
    <groupId>org.apache.storm</groupId> 
    <artifactId>storm-kafka</artifactId> 
    <version>1.0.2</version> 
</dependency> 

Теперь он работает для меня!