Apace Arrow Plasma Client - Не удается подключиться к хранилищу памяти (UnsatisfiedLinkError) - PullRequest
0 голосов
/ 09 ноября 2018

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

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

Документы 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)


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

1 Ответ

0 голосов
/ 05 февраля 2019

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

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 в системном пути.

...