Apace Arrow Plasma Client - Не удается подключиться к хранилищу памяти (UnsatisfiedLinkError)
Я пытаюсь использовать Java API для Apache Arrow для подключения к хранилищу памяти. Я успешно сделал это на Python, используя Python API, следуя приведенному здесь руководству.
Я также посмотрел документацию по API C++, но это не сильно помогло.
Документы Java делают его похожим на другую документацию.
Убедитесь, что хранилище плазменных объектов работает (обычно для примера "/tmp/plasma").
- Создать клиента
- Подключитесь к клиенту, указав хранилище объектов ("/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
в системном пути, а также.