Apace Arrow Plasma Client - Не удается подключиться к хранилищу памяти (UnsatisfiedLinkError)

Я пытаюсь использовать Java API для Apache Arrow для подключения к хранилищу памяти. Я успешно сделал это на Python, используя Python API, следуя приведенному здесь руководству.

Я также посмотрел документацию по API C++, но это не сильно помогло.

Документы Java делают его похожим на другую документацию.

  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)


Любая помощь приветствуется. Спасибо!

0 ответов

Прошло много времени с тех пор, как я это делал, но проблема довольно проста, хотя ее нелегко найти. В тестовых процедурах вы можете найти важную строку:

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

Общая библиотека libplasma_java.so создается при компиляции расширения C++ в CMake с опцией -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.so а также libarrow.so в системном пути, а также.

Другие вопросы по тегам