【问题标题】:Apache Arrow Plasma Client - Can't connect to memory store (UnsatisfiedLinkError)Apache Arrow Plasma 客户端 - 无法连接到内存存储(UnsatisfiedLinkError)
【发布时间】:2019-04-13 08:06:13
【问题描述】:

我正在尝试使用 Java API for Apache Arrow 连接到内存存储。我已经按照指南here 使用Python API 成功地在Python 中完成了这项工作。

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

The Java Docs 使它看起来与其他文档相似。

  1. 确保等离子对象存储正在运行(通常是“/tmp/plasma” 示例)。

    1. 创建客户端
    2. 通过为其他两个参数提供对象存储 ("/tmp/plasma") 和 ("", 0) 来连接到客户端。

但是,当尝试使用以下行时,我得到一个 UnsatisfiedLinkError,我在 Apache Arrow 文档中找不到任何参考。 google 找到的其他解决方案(例如调用 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)


感谢任何帮助。谢谢!

【问题讨论】:

  • 你能在开发者邮件列表 dev@arrow.apache.org 上提问吗?这是非常前沿的东西
  • 我的建议是缺少本机库(由于 JNI),这是必需的。

标签: java sockets java-native-interface pyarrow apache-arrow


【解决方案1】:

我已经有一段时间没有这样做了,但问题很简单,虽然不容易找到。在测试例程中,您可以找到重要的一行:

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

共享库libplasma_java.so 是在使用选项-DARROW_PLASMA_JAVA_CLIENT=on 在CMake 中编译C++ 扩展时创建的。在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

【讨论】:

    猜你喜欢
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多