OceanBaseデータベースは、外部テーブルのサードパーティデータソースとしてファイルシステムに接続するために、Java SDKとの連携をサポートしています。この機能はJNIフレームワークを使用して実装されているため、対応するOceanBaseデータベース環境にはJava SDK環境の構築が必要です。
環境設定
注意
HDFS/ODPS外部テーブル機能を使用する必要があり、かつOceanBaseデータベースが分散デプロイメントである場合、対応するすべてのマシンノードで以下のJava環境の構築と依存関係のインストールを行う必要があります。単一ノードのみに設定することはできません。
すべての環境設定と依存関係のインストール操作は、adminユーザーとして実行する必要があります。以下の方法でユーザーを切り替えてください:
su - admin
Java環境の構築と設定
ダウンロードURLから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]# sudo 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インストールパッケージを取得します。
- エンタープライズ版ユーザーは、サポートチームに連絡してdevdeps-hdfs-sdk RPMインストールパッケージを取得してください。
- コミュニティエディションのユーザーは、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インストールパッケージを取得します。
- エンタープライズ版ユーザーは、サポートチームに連絡してdevdeps-java-extensions RPMインストールパッケージを取得してください。
- コミュニティエディションのユーザーは、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インストールパッケージをダウンロードしてください。
- OceanBaseデータベースV4.4.1バージョン:1.0.2バージョンのdevdeps-java-extensions RPMインストールパッケージをダウンロードしてください。
- OceanBaseデータベースV4.4.2以降のバージョン:1.0.3バージョンの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 -Xms2048m -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インストールパッケージを手動で解凍できます。必要に応じて、必要なパスに配置してください。例:
rpm2cpio devdeps-hdfs-sdk-3.3.6-xxxxx.xxx.xxx.rpm | cpio -idmvターゲットパスを指定します。
インストールパッケージを解凍した後、
mvコマンドを使用して解凍されたファイルをユーザーがアクセス可能なカスタムパス(例えば~/hdfs_lib)に移動できます。例:
mv ./usr/local/oceanbase/deps/devel/lib/* ~/hdfs_lib/絶対パスを取得し確認します。
realpathコマンドを使用して、カスタムパスの絶対パスを確認できます。例:
realpath ~/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プロセスを再度起動する際には、起動パラメータを指定する必要はありません。以前に設定した起動パラメータは既にパラメータファイルに書き込まれているためです。
関連ドキュメント
ODPS外部テーブルの作成に関する詳細は、外部テーブルの作成(MySQLモード)または外部テーブルの作成(Oracleモード)を参照してください。