gpt4 book ai didi

java - 在 Hadoop 上运行 Java native 库

转载 作者:可可西里 更新时间:2023-11-01 14:41:14 24 4
gpt4 key购买 nike

我正在尝试在本地运行的 hadoop 上运行 Gurobi 优化器。 Gurobi 使用 JNI。为了测试如何在 hadoop 上运行它,我编写了以下代码。

  public static void main(String[] args) throws Exception {
try {
GRBEnv env2 = new GRBEnv();
env2.set(GRB.IntParam.OutputFlag, 0);
} catch (Exception e) {
e.printStackTrace();
}

Configuration conf = new Configuration();
int res = ToolRunner.run(conf, new GurobiTest(), args);
System.exit(res);
}

Gurobi在使用前需要设置一些环境变量(其中LD_LIBRARY_PATH指向Gurobi原生库):

export LD_LIBRARY_PATH=/home/username/System/gurobi563/linux64/lib
export GRB_LICENSE_FILE=/home/username/gurobi.lic

当我打包我的项目并使用 jvm 运行它时

java -cp ./target/GurobiOnHadoop-0.0.1-SNAPSHOT-jar-with-dependencies.jar mpi.de.test.GurobiTest

一切正常

但是当我尝试在 hadoop 上运行它时

hadoop jar ./target/GurobiOnHadoop-0.0.1-SNAPSHOT-jar-with-dependencies.jar mpi.de.test.GurobiTest -libjars ./target/GurobiOnHadoop-0.0.1-SNAPSHOT-jar-with-dependencies.jar

我得到一个错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: no GurobiJni56 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at gurobi.GurobiJni.<clinit>(GurobiJni.java:193)
at gurobi.GRBEnv.<init>(GRBEnv.java:16)
at gurobi.GRBEnv.<init>(GRBEnv.java:11)
at mpi.de.test.GurobiTest.main(GurobiTest.java:89)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:197)

我尝试过很多不同的东西。我在hadoop运行命令中添加了"-Djava.library.path=/home/username/System/gurobi563/linux64/lib"。我已经在 hadoop-env.sh 中设置了所需的环境变量。我尝试从代码级别加载 *.so 文件(使用例如 ystem .load("/home/用户名/System/gurobi563/linux64/lib/libGurobiJni56.so");)。我还尝试将这些库发送到 hadoop 分布式文件系统,从那个地方加载文件或将环境变量指向那个地方。

我正在使用:

Java 版本“1.7.0_60”

hadoop-0.20.2-cdh3u6

Debian 7.5 喘不过气来

最佳答案

原来是我在 hadoop-env.sh 中的 JAVA_LIBRARY_PATH 设置错误。

关于java - 在 Hadoop 上运行 Java native 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24289535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com