java.lang.UnsatisfiedLinkError 在风暴拓扑中使用第三方库时
java.lang.UnsatisfiedLinkError when using third party library in storm toplogy
我正在创建一个在其中一个螺栓中使用第三方库 MITIE 的风暴拓扑。根据文档 MITIE 有一些必需的本机库和 jar,它们是 运行 所必需的。
它附带了一个示例 java class 和脚本 (run.sh) 到 运行 它看起来像这样:
export LD_LIBRARY_PATH=/opt/MITIE/mitielib
export CLASSPATH=/opt/MITIE/mitielib/javamitie.jar:.
javac NerExample.java
java NerExample
这行得通。然后我修改了我的 ~/.bashrc 文件以包含上面的两个导出,这样我就可以 运行 脚本而不必在其中包含这些导出。我从脚本中删除了导出语句,它也 运行 没问题。
我的想法是,如果我在我的 ~/.bashrc 中创建这两个导出,那么当我 运行 我的 storm 拓扑时,它应该能够获取库目录并也能工作。
问题是由于某种原因,当我 运行 我的风暴拓扑时它不起作用。我收到以下错误:
java.lang.UnsatisfiedLinkError: no javamitie in java.library.path
我到处寻找答案,并且厌倦了在我的 pom.xml 中使用 surefire maven 插件,就像这样:
<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>
但似乎没有任何效果。有谁知道如何让本地库在 java 风暴拓扑项目中工作?
理论上,如果您将任何 jar 文件放入风暴的 lib
目录中,它将包含在 clssspath 中。另一种方法是将所有依赖项打包到您要提交到集群的 jar 中。
在研究了 storm.yaml 文件的所有可能配置后,有一个是我第一次错过的,而这正是我解决这个问题所需要的。添加:
java.library.path: "/opt/MITIE/mitielib"
到 storm.yaml 并重新启动风暴,一切正常。
我正在创建一个在其中一个螺栓中使用第三方库 MITIE 的风暴拓扑。根据文档 MITIE 有一些必需的本机库和 jar,它们是 运行 所必需的。
它附带了一个示例 java class 和脚本 (run.sh) 到 运行 它看起来像这样:
export LD_LIBRARY_PATH=/opt/MITIE/mitielib
export CLASSPATH=/opt/MITIE/mitielib/javamitie.jar:.
javac NerExample.java
java NerExample
这行得通。然后我修改了我的 ~/.bashrc 文件以包含上面的两个导出,这样我就可以 运行 脚本而不必在其中包含这些导出。我从脚本中删除了导出语句,它也 运行 没问题。
我的想法是,如果我在我的 ~/.bashrc 中创建这两个导出,那么当我 运行 我的 storm 拓扑时,它应该能够获取库目录并也能工作。
问题是由于某种原因,当我 运行 我的风暴拓扑时它不起作用。我收到以下错误:
java.lang.UnsatisfiedLinkError: no javamitie in java.library.path
我到处寻找答案,并且厌倦了在我的 pom.xml 中使用 surefire maven 插件,就像这样:
<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>
但似乎没有任何效果。有谁知道如何让本地库在 java 风暴拓扑项目中工作?
理论上,如果您将任何 jar 文件放入风暴的 lib
目录中,它将包含在 clssspath 中。另一种方法是将所有依赖项打包到您要提交到集群的 jar 中。
在研究了 storm.yaml 文件的所有可能配置后,有一个是我第一次错过的,而这正是我解决这个问题所需要的。添加:
java.library.path: "/opt/MITIE/mitielib"
到 storm.yaml 并重新启动风暴,一切正常。