java.lang.UnsatisfiedLinkError при использовании сторонней библиотеки в штормовой топологии

1

Я создаю топологию шторма, которая использует стороннюю библиотеку MITIE в одном из болтов. В документации MITIE есть некоторые требуемые родные библиотеки и банки, которые необходимы для ее запуска.

Он поставляется в комплекте с примером java-класса и скрипта (run.sh) для его запуска, который выглядит следующим образом:

 export LD_LIBRARY_PATH=/opt/MITIE/mitielib
 export CLASSPATH=/opt/MITIE/mitielib/javamitie.jar:.

 javac NerExample.java
 java NerExample

Это работает. Затем я изменил файл ~/.bashrc, чтобы он содержал два экспортированных файла, поэтому я могу запустить скрипт, не имея при этом их экспорта. Я удалил инструкции экспорта из сценария, и он также отлично работает.

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

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

java.lang.UnsatisfiedLinkError: no javamitie in java.library.path

Я искал всюду для ответа и устал использовать плагин verfire maven в моем pom.xml, например:

       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>-Djava.library.path=${basedir}/lib/mitielib</argLine>
            </configuration>
        </plugin>

но ничего не работает. Кто-нибудь знает, как я могу заставить Native Libraries работать в проекте топологии java storm?

Теги:
apache-storm

2 ответа

0
Лучший ответ

Изучив все возможные конфигурации для файла storm.yaml, был один, если я пропустил первый раз и был именно тем, что мне нужно было решить. добавлением:

  java.library.path: "/opt/MITIE/mitielib" 

to storm.yaml и перезагрузка бури, все сработало.

0

Теоретически, если вы помещаете какие-либо баночки внутри каталога storm lib он будет включен в clssspath. Другим способом может быть упаковка всех зависимостей внутри банки, которую вы собираетесь отправить в кластер.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню