OceanBaseデータベースは、外部テーブルのサードパーティデータソースとしてファイルシステムと接続するために、Java SDKとの連携に対応しています。この機能はJNI (Java Native Interface)フレームワークを使用して実装されているため、OceanBaseデータベースの環境にはJava SDKの構築が必要です。
環境の設定
注意
HDFS/ODPS外部テーブル機能を使用する場合、OceanBaseデータベースが分散デプロイされている環境では、すべてのマシンノードで以下のJava環境のデプロイと依存関係のインストールを行う必要があります。単一のノードだけに設定することはできません。
すべての環境構成と依存関係のインストールは、adminユーザーとして実行する必要があります。次のコマンドでユーザーを切り替えてください:
su - admin
Java環境のデプロイと設定
ダウンロード先からOpenJDK JAVAのインストールパッケージをダウンロードします。
注意
OpenJDK 11の最新バージョンを使用してください。
本記事では、OpenJDK 11.0.29+7バージョンのダウンロード手順を例に説明します。具体的な操作手順は以下のとおりです。
[admin@xxx /home/admin/rpm]# wget https://builds.openlogic.com/downloadJDK/openlogic-openjdk/11.0.29+7/openlogic-openjdk-11.0.29+7-linux-x64.tar.gz対応するインストールパッケージを正常に解凍します。
例は以下のとおりです。
[admin@xxx /home/admin/rpm]# tar -zxvf openlogic-openjdk-11.0.29+7-linux-x64.tar.gzインストールパスは以下のとおりです。
/home/admin/rpm/openlogic-openjdk-11.0.29+7-linux-x64注意
このパスは、現在のOBServerノードでJavaのホームディレクトリを設定するためのものです。これは、対応する構成パラメータob_java_homeの値に相当します。
依存関係のインストール
OceanBaseデータベースは、HDFS/ODPS外部テーブル機能を使用するには、以下のコンポーネントに依存します。
devdeps-hdfs-sdk RPMパッケージ:
このパッケージには、HDFS/ODPSなどの外部テーブルの実行に必要な共有ライブラリが含まれています。JVM環境とJNI(Java Native Interface)との相互作用を提供するためのコアインターフェースを備えています。このコンポーネントは、Java仮想マシンとローカル外部テーブル用Java SDKとの通信の橋渡しとして機能し、外部テーブル機能の安定した動作を保証します。
devdeps-java-extensions RPMパッケージ:
このパッケージは、HDFS 外部表や ODPS などのその他の外部データソースに必要な主要依存ライブラリ(JAR ファイル)を統合したものです。拡張パッケージには、完全な Java 実行時の依存チェーンが含まれており、分散環境における外部表機能の互換性とパフォーマンスの最適化を確保します。
依存ライブラリHDFS.soのデプロイと設定
devdeps-hdfs-sdk RPMインストールパッケージを取得します。
- Enterprise Editionのユーザーは、サポートチームまでお問い合わせください。devdeps-hdfs-sdk RPMインストールパッケージを取得できます。
- Community Editionのユーザーは、Alibaba Cloud OceanBaseイメージページの
development-kit/ディレクトリをクリックし、開発ツールリソースディレクトリに移動して、devdeps-hdfs-sdk RPMインストールパッケージをダウンロードできます。
インストールパッケージを取得した後、次のコマンドを使用してインストールします。
sudo rpm -Uvh devdeps-hdfs-sdk-3.3.6-xxxxx.xxx.xxx.rpm例:
sudo rpm -Uvh devdeps-hdfs-sdk-3.3.6-112024123116.el7.x86_64.rpmインストールが予想通りに完了したか確認します。
libhdfs.soとlibhdfs.so.0.0.0ファイルが存在し、それらのソフトウェアリンクが正常である必要があります。例:
$ll /usr/local/oceanbase/deps/devel/lib total 376 lrwxrwxrwx 1 root root 16 Dec 24 19:49 libhdfs.so -> libhdfs.so.0.0.0 -rwxr-xr-x 1 root root 384632 Dec 24 19:09 libhdfs.so.0.0.0
依存するjarパッケージのパス設定
devdeps-java-extensions RPMインストールパッケージを取得します。
Enterprise Editionのユーザーは、サポートチームに連絡してdevdeps-java-extensions RPMインストールパッケージを取得してください。
Community Editionのユーザーは、Alibaba Cloud OceanBaseイメージページの
development-kit/ディレクトリをクリックし、開発ツールリソースディレクトリに移動して、devdeps-java-extensions RPMインストールパッケージをダウンロードします。注意
- OceanBaseデータベースV4.3.5 BP1および以前のバージョン:1.0.0バージョンのdevdeps-java-extensions RPMインストールパッケージをダウンロードしてください。
- OceanBaseデータベースV4.3.5 BP2以降のバージョン:1.0.1バージョンのdevdeps-java-extensions RPMインストールパッケージをダウンロードしてください。
- OceanBaseデータベースV4.4.0バージョン:1.0.1バージョンのdevdeps-java-extensions RPMインストールパッケージをダウンロードしてください。
インストールパッケージを取得したら、次のコマンドを実行してインストールします。
sudo rpm -Uvh devdeps-java-extensions-x.x.x-xxxxxxxxxxxx.xxx.xxxxxx.rpm --prefix=/user_install_directory例は次のとおりです。
sudo rpm -Uvh devdeps-java-extensions-1.0.0-122025032514.el7.x86_64.rpm --prefix=/home/admin/oceanbaseインストールが期待どおりに実行されているかを確認します。
インストールパス
/home/admin/oceanbase/jni_packages/v1.0.0配下のoceanbase-odps-connector-jar-with-dependencies.jarファイルが存在するか確認します。例は次のとおりです。
$ll /home/admin/oceanbase/jni_packages/v1.0.0 total 52756 drwxr-sr-x 4 root root 4096 Dec 24 20:25 hadoop drwxr-xr-x 3 root root 4096 Dec 24 20:25 lib -rw-r--r-- 1 root root 54008720 Dec 24 19:52 oceanbase-odps-connector-jar-with-dependencies.jar注意
このパスは、OBServer 起動時に JVM が読み込む実行可能な依存 JAR パッケージのパスを設定するためのものです。これは、対応する構成パラメータob_java_connector_pathの値に相当します。
(オプション)observerプロセスを再起動する
説明
- JAVA SDK環境を初めて使用する場合は、observerプロセスの再起動は不要です。
- 現在のOBServerがサポートするJNI関連の設定は、柔軟かつ即時に変更・反映することはできません。そのため、Java環境変数の設定を変更する必要がある場合は、observerプロセスを再起動する必要があります。
HDFS/ODPS外部テーブル機能を使用する場合、対応するOBServerサーバーの設定が必要です。設定手順は以下のとおりです。
注意
以下のすべての設定はクラスタレベルの設定であり、一度設定すれば全ノードで適用されます。個別ノードごとに設定する必要はありません。
ステップ1:Java実行環境に関する構成パラメータを構成する
注意
以下の設定はすべてsysテナントで実行します。
Java環境を有効にし、外部テーブルのSDK(Java SDK)へのアクセスを許可します。
例:
ALTER SYSTEM SET ob_enable_java_env = true;この設定の詳細については、ob_enable_java_envを参照してください。
現在のOBServerノードで実行されているJavaのホームディレクトリを設定します。
説明
このパスは、OpenJDK Javaのインストールパスから取得します。
例:
ALTER SYSTEM SET ob_java_home = "/home/admin/rpm/openlogic-openjdk-11.0.29+7-linux-x64";この設定の詳細については、ob_java_homeを参照してください。
OBServer起動時のJVMがロードできる実行可能な依存JARファイルのパスを設定します。
説明
このパスは、JARパッケージのRPMインストールパスから取得します。
例:
ALTER SYSTEM SET ob_java_connector_path = "/home/admin/oceanbase/jni_packages/v1.0.0";この設定の詳細については、ob_java_connector_pathを参照してください。
Java環境の起動に関連する設定を設定します。
対応するログフォルダのパスを作成します。
mkdir -p /home/user/jvmlogs mkdir -p /home/user/jvmlogs/heapdumpsJava実行時のJVM起動設定を設定します。
例:
ALTER SYSTEM SET ob_java_opts="-Xmx2048m -Xmn2048m -XX:-CriticalJNINatives -Djdk.lang.processReaperUseDefaultStackSize=true -Xrs -XX:+HeapDumpOnOutOfMemoryError -Xloggc:/home/admin/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/heapdumps/ -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled -XX:+TieredCompilation -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses ";この設定の詳細については、ob_java_optsを参照してください。
注意
- この設定を変更するには、observerプロセスを再起動する必要があります。現在のHDFS接続では、HDFSデータストリームを直接C++メモリヒープにコピーしているため、
-Xmx2048m -Xms2048mの設定を適宜削減できます。 - GCログファイルは、設定フォルダのパスが存在する場合にのみ生成されます。パスが存在しない場合は、生成されません。
- この設定を変更するには、observerプロセスを再起動する必要があります。現在のHDFS接続では、HDFSデータストリームを直接C++メモリヒープにコピーしているため、
(オプション)ODPS用のJava SDK設定を設定します。
注意
HDFS用Java SDKではこの設定は不要ですが、その他の設定はすべて同じです。
Java SDKを使用するには、
_use_odps_jni_connectorをtrueに設定する必要があります。ALTER SYSTEM SET _use_odps_jni_connector = true;
ステップ2(オプション):sudo権限がない場合のhdfs-sdkパッケージの解凍
現在の環境で
sudo権限を使用してインストールコマンドを実行できない場合は、rpm2cpioコマンドを使用してdevdeps-hdfs-sdk RPMインストールパッケージを手動で解凍できます。必要に応じて、必要なパスに配置できます。例:
code-placeholder-590164ff-b9fb-49f9-8daf-8c921e5bfec8
ターゲットパスを指定します。
インストールパッケージを解凍した後、
mvコマンドを使用して、ユーザーがアクセスできるカスタムパス(例~/hdfs_lib)に解凍されたファイルを移動できます。例:
mv ./usr/local/oceanbase/deps/devel/lib/* ~/hdfs_lib/絶対パスを取得して確認します。
realpathコマンドを使用して、カスタムパスの絶対パスを確認できます。例:
ALTER SYSTEM SET _ob_additional_lib_path = './usr/local/oceanbase/deps/devel/lib/* ~/hdfs_lib/';実行結果は次のとおりです:
/home/${user_name}/hdfs_libOceanBaseデータベースのパス変数を設定します。
例:
sysテナントにログインし、次のコマンドを実行して、カスタムパスをシステム設定に登録します。
注意
- 以下のステートメントを実行する際は、例中の
${user_name}を実際のパスに置き換えてください。 - パスは絶対パスでなければなりません。複数のパスはコロン
:で区切り、スペースを含めることはできません。
ALTER SYSTEM SET _ob_additional_lib_path = '/home/${user_name}/hdfs_lib';- 以下のステートメントを実行する際は、例中の
ステップ3:observerプロセスの再起動
すべてのマシンのobserverプロセスを停止し、再び起動します。
adminユーザーに切り替えます。[admin@xxx /home/admin/oceanbase/etc]# su - adminobserverプロセスを停止します。
-bash-4.2$ kill -9 `pidof observer`observerプロセスを再起動します。
-bash-4.2$ cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer説明
observerプロセスを再度起動するには、起動パラメータを指定する必要はありません。以前の起動パラメータはすでにパラメータファイルに記録されています。