Я создаю топологию шторма, которая использует стороннюю библиотеку 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?
Изучив все возможные конфигурации для файла storm.yaml, был один, если я пропустил первый раз и был именно тем, что мне нужно было решить. добавлением:
java.library.path: "/opt/MITIE/mitielib"
to storm.yaml и перезагрузка бури, все сработало.
Теоретически, если вы помещаете какие-либо баночки внутри каталога storm lib
он будет включен в clssspath. Другим способом может быть упаковка всех зависимостей внутри банки, которую вы собираетесь отправить в кластер.