阿帕奇箭等离子客户端 - 无法连接到MemoryStore的(UnsatisfiedLinkError)

问题描述 投票:1回答:1

我试图使用Java API为Apache箭头连接到内存存储。我已经在Python这样做,成功后,按照指导here使用Python API。

我也看了看C++ API documentation,但它并没有多大帮助。

The Java Docs使它看起来类似于其他文档。

  1. 确保血浆对象存储在运行(通常是“/ tmp目录/等离子”的例子)。 创建客户端 通过提供对象存储(“/ TMP /血浆”),和连接到客户端(“”,0)为其它两个参数。

然而,尝试使用以下行的时候,我得到一个UnsatisfiedLinkError,我无法找到阿帕奇箭文档中的任何引用。发现谷歌的其他解决方案(如呼叫System.load)都没有成功要么。

PlasmaClient client = new PlasmaClient("/tmp/plasma", "", 0);

我的错误消息的副本可以看到下面:

Exception in thread "main" java.lang.UnsatisfiedLinkError:org.apache.arrow.plasma.PlasmaClientJNI.connect(Ljava/lang/String;Ljava/lang/String;I)J at org.apache.arrow.plasma.PlasmaClientJNI.connect(Native Method) at org.apache.arrow.plasma.PlasmaClient.<init>(PlasmaClient.java:44) at plas.main(plas.java:11)


任何帮助表示赞赏。谢谢!

java sockets java-native-interface pyarrow apache-arrow
1个回答
0
投票

它已经有一段时间,因为我是这样做,但这个问题很简单,但不容易找到。在测试程序,你可以找到一个重要的一行:

System.loadLibrary("plasma_java");
val plasmaClient = new PlasmaClient("/tmp/plasma","",0);

编译在C进行C ++扩展的选项libplasma_java.so时创建的共享库-DARROW_PLASMA_JAVA_CLIENT=on。在arrow/java/plasma/test.sh文件,你可以找到整个生成命令,但这是从该文件中派生一个:

cd arrow/cpp
mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=Release \
            -DCMAKE_C_FLAGS="-g -O3" \
            -DCMAKE_CXX_FLAGS="-g -O3" \
            -DARROW_BUILD_TESTS=off \
            -DARROW_HDFS=on \
            -DARROW_BOOST_USE_SHARED=on \
            -DARROW_PYTHON=on \
            -DARROW_PLASMA=on \
            -DPLASMA_PYTHON=on \
            -DARROW_JEMALLOC=off \
            -DARROW_WITH_BROTLI=off \
            -DARROW_WITH_LZ4=off \
            -DARROW_WITH_ZLIB=off \
            -DARROW_WITH_ZSTD=off \
            -DARROW_PLASMA_JAVA_CLIENT=on \
            ..
make VERBOSE=1 -j4
make install

我只是跑它并根据需要它内置了全部。如果你想安装的地方简单地添加前缀-DCMAKE_INSTALL_PREFIX=/home/myuser/install-here

如果您运行如果System.loadLibrary("plasma_java")可以某处你的系统上找到.so它仅适用(例如东西通常是在Linux环境变量LD_LIBRARY_PATH指定)。注意,这也需要在系统路径libplasma.solibarrow.so为好。

© www.soinside.com 2019 - 2024. All rights reserved.