はじめに
Apache Iceberg(以下、Iceberg)は、多くのデータレイクのユースケースに適しているデータテーブルフォーマットです。 Oracle Autonomous AI DatabaseのData Transforms機能は既存データをIcebergフォーマットへ変換できる便利な機能です。
本検証はOCIのVirtual Machineインスタンス(Ubuntu)に、Apache Gravitino 1.0.1(以下、Gravitino)とPostgreSQL 14をデプロイして、Iceberg Rest Catalogサービスを構築します。Oracle Autonomous AI Lakehouse環境を作成して、テスト用データを準備した後、同環境のData Transforms機能を利用してデータ変換処理を実行し、Oracle Autonomous AI Lakehouse内のテストデータをIcebergフォーマットに変換して、GravitinoのIceberg Rest Catalogに登録し、実データはOCI Object Storageに保存します。
構成図
本検証の構成図は以下です。

・Virtual Machineインスタンス(Ubuntu):Gravitino 1.0.1とPostgreSQL 14をデプロイして、Iceberg Rest Catalogサービスを構築します。
・Oracle Autonomous AI Lakehouse:Data Transforms機能を利用してデータ変換処理を実行し、Oracle Autonomous AI Lakehouse内のテストデータをIcebergフォーマットに変換して、GravitinoのIceberg Rest Catalogに登録します。
・OCI Object Storage:Iceberg実データを保存します。
環境準備
OCI Object Storageバケットの作成
OCI Object Storageバケットを作成します。作成方法はOCIドキュメントをご参照ください。
Oracle Autonomous AI Lakehouseインスタンス作成
Oracle Autonomous AI Lakehouseインスタンスを作成します。作成方法はOCIドキュメントをご参照ください。こちらのチュートリアルを参考し、検証用データをダウンロードし、ユーザを作成します。検証用データは「Movie_Sales_2020.csv」を使用し、ユーザQTEAMへロードします。
Gravitino Iceberg Rest Catalogサービスの構築
Ubuntuインスタンス作成
作成方法はOCIドキュメントをご参照ください。本手順は、検証目的のためインスタンスをPublic Subnet内に配置します。
Ubuntuインスタンスへログインします。作業ディレクトリを作成します。
sudo mkdir -p /opt/software
cd /opt/software
ネットワーク設定
Gravitino Iceberg Rest Catalog Serviceのデフォルトポートは9001ですが、パブリックエンドポイントを持つAutonomous AI DatabaseのData Transforms機能の仕様により、Gravitino Iceberg REST Catalog Serviceが使用可能なポートは「2484, 1521-1525, 1708, 3306, 80」に限定されています。VCNセキュリティルールで対象ポートを開放します。設定方法はOCIドキュメントをご参照ください。本検証はポート2484を使用します。
Ubuntuインスタンス内のファイアウォール制御が有効になった場合、対象ポートを開放する必要があります。
sudo iptables -L -n | grep 2484
sudo iptables -I INPUT -p tcp --dport 2484 -j ACCEPT
sudo ss -tuln | grep 2484
JDKのインストール
GravitinoはJava実行環境が必要なため、JDKをインストールします。
sudo apt install openjdk-17-jdk -y
PostgreSQLのインストール
Gravitino Iceberg REST Catalog Serviceはメタデータ保存用のバックエンドとしてPostgreSQLまたはMySQLを必要とします。本検証はPostgreSQLをインストールします。データベースiceberg_dbとユーザicebergを作成します。ユーザicebergへ権限を付与します。
sudo apt install postgresql postgresql-contrib -y
sudo -u postgres psql
CREATE DATABASE iceberg_db;
CREATE USER iceberg WITH PASSWORD '*****';
GRANT ALL PRIVILEGES ON DATABASE iceberg_db TO iceberg;
exit
Gravitino 1.0.1のインストール
Apache Gravitinoは、レイクハウス向けオープンソースの統合データカタログで、Icebergなどのテーブルフォーマットに対応し、複数のメタデータを一元管理してデータインフラの運用効率を高めます。本検証はGravitino 1.01を使用します。
cd /opt/software
sudo wget https://downloads.apache.org/gravitino/1.0.1/gravitino-iceberg-rest-server-1.0.1-bin.tar.gz
sudo tar -xzf gravitino-iceberg-rest-server-1.0.1-bin.tar.gz
sudo chown -R ubuntu:ubuntu ./gravitino-iceberg-rest-server-1.0.1-bin
設定ファイルを編集します。
cd ./gravitino-iceberg-rest-server-1.0.1-bin.conf
vi gravitino-iceberg-rest-server.conf
以下のパラメータを設定します。
| パラメータ名 | 設定内容 |
|---|---|
| gravitino.iceberg-rest.httpPort | 2484(デフォルトは9001ですが、Data Transformsを実行するAutonomous AI DatabaseがPublic Subnet内に配置した場合、Data Transformsの仕様により、Gravitino Iceberg REST Catalog Serviceが使用可能なポートは「2484, 1521-1525, 1708, 3306, 80」に限定されています。詳細はドキュメントをご参照ください。) |
| gravitino.iceberg-rest.catalog-backend | jdbc |
| gravitino.iceberg-rest.jdbc-driver | org.postgresql.Driver |
| gravitino.iceberg-rest.uri | jdbc:postgresql://127.0.0.1:5432/iceberg_db |
| gravitino.iceberg-rest.jdbc-user | iceberg |
| gravitino.iceberg-rest.jdbc-password | ***** |
| gravitino.iceberg-rest.jdbc-initialize | true |
| gravitino.iceberg-rest.credential-providers | s3-secret-key |
| gravitino.iceberg-rest.s3-access-key-id | OCI環境のアクセスキーの取得方法はドキュメントをご参照ください。 |
| gravitino.iceberg-rest.s3-secret-access-key | 秘密キーの取得方法はドキュメントをご参照ください。 |
| gravitino.iceberg-rest.io-impl | org.apache.iceberg.aws.s3.S3FileIO |
| gravitino.iceberg-rest.s3-endpoint | S3互換URL。\$namespace.compat.objectstorage.$region.oci.customer-oci.com |
| gravitino.iceberg-rest.s3-region | OCI Object Storgeのリージョン(例:ap-tokyo-1) |
| gravitino.iceberg-rest.s3-path-style-access | true |
| gravitino.iceberg-rest.warehouse | Iceberg実データのOCI Object Storage保存先(例:s3://gravitino gravitinoはOCI Object StorageのBucket名) |
必要なライブラリをダウンロードします。
- postgresql-42.7.8.jar:PostgreSQLのJDBCドライバーで、GravitinoがPostgreSQLと接続してIcebergメタデータを読み書きするために必要なライブラリです。
- iceberg-aws-bundle-1.9.2.jar:IcebergのAWS対応総合ライブラリで、OCI Object Storage(S3互換)にIcebergデータを保存・読み出す際の接続・操作機能を提供します。
- gravitino-aws-1.0.1.jar:GravitinoのAWS/OCI対応ライブラリで、GravitinoからOCI Object Storageへのアクセス認証・データ連携を実現するための依存パッケージです。
cd /opt/software/gravitino-iceberg-rest-server-1.0.1-bin/libs
sudo wget https://jdbc.postgresql.org/download/postgresql-42.7.8.jar
sudo chown ubuntu:ubuntu postgresql-42.7.8.jar
sudo wget https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-aws-bundle/1.9.2/iceberg-aws-bundle-1.9.2.jar
sudo chown ubuntu:ubuntu iceberg-aws-bundle-1.9.2.jar
wget https://repo1.maven.org/maven2/org/apache/gravitino/gravitino-aws/1.0.1/gravitino-aws-1.0.1.jar
sudo chown ubuntu:ubuntu gravitino-aws-1.0.1.jar
log4j-api-2.24.3.jar及びlog4j-core-2.24.3.jarが存在する場合、Gravitinoは起動できない事象が発生しますので、リネームします。
mv log4j-api-2.24.3.jar log4j-api-2.24.3.jar.org
mv log4j-core-2.24.3.jar log4j-core-2.24.3.jar.org
環境変数を設定します。
sudo vim /etc/profile.d/gravitino.sh
export GRAVITINO_HOME=/opt/software/gravitino-iceberg-rest-server-1.0.1-bin
export PATH=$GRAVITINO_HOME/bin:$PATH
source /etc/profile.d/gravitino.sh
Gravitinoを起動します。
cd $GRAVITINO_HOME/bin
./gravitino-iceberg-rest-server.sh status
./gravitino-iceberg-rest-server.sh start
/opt/software/gravitino-iceberg-rest-server-1.0.1-bin
#####################################################################
# ____ ____ _ ___ ___ ___ _____ ___ _ _ ___ #
# / ___| | _ \ / \ \ \ / / |_ _||_ _||_ _|| \ | | / _ \ #
# | | __ | |_) | / _ \ \ \ / / | | | | | | | \| || | | | #
# | |_| | | _ < / ___ \ \ V / | | | | | | | |\ || |_| | #
# \____| |_| \_\/_/ \_\ \_/ |___| |_| |___||_| \_| \___/ #
# Version: 1.0.1 #
#####################################################################
Data Transformsの実行
ソースADB接続の作成
作成したOracle Autonomous AI Lakehouseのコンソール画面において、「データベース・アクション」→「すべてのデータベース・アクションの表示」をクリックします。
左上のメニューから「データ変換」をクリックします。

「データ変換」→「接続」→「接続の作成」をクリックします。
こちらのチュートリアルを参考し、ソースADBの接続を作成します。

ターゲットIceberg Catalogの接続の作成
再度「接続の作成」をクリックし、Gravitino Iceberg Rest Catalogサービスへの接続を作成します。「接続タイプ」を「Apache Iceberg」に選択します。

「接続の詳細」を設定し、「接続のテスト」をクリックします。
| パラメータ | 設定値 |
|---|---|
| 接続名 | 任意の接続名 |
| カタログ名 | 任意のカタログ名 |
| Rest URL | http://<Ubuntuインスタンスのpublic ip>:2484/iceberg (「http://」の記述は必須です。) |
| 認証 | 検証目的のため、Noneに設定 |
ソースADBの接続及びターゲットIceberg Catalogの接続が作成されました。

データロードの実行
「プロジェクト」→「プロジェクトの作成」をクリックします。任意のプロジェクト名を入力します。

作成したプロジェクトの「詳細の表示」をクリックします。

「データ・ロードの作成」をクリックします。データ・ロード名を設定します。Data Transformsを使用するため、「デプロイメント・タイプ」を「データ変換(バッチ)」に選択します。

ソース接続は作成したソースADB接続「MovieStream」を選択します。

ターゲット接続は作成したターゲットIceberg Catalogの接続「APACHE_ICEBERG_CATALOG」を選択します。保存します。

ソースADBの検証用データが表示されていることを確認します。

対象データに☑️をつけ、「追加」クリックし、青の「保存」をクリックします。

データ・ロードが正常に更新されましたあと、緑の「実行」をクリックします。

データ・ロードが開始されました。データ・ロードステータスをリフレッシュし、状況を確認します。
数分後、データ・ロードが完了しました。
OCI Object Storageの実データ確認
ターゲットBucketにネームスペースMovieDataが新規作成されました。

中には検証データMOVIE_SALES_2020のメタデータ及び実データが作成されました。

以上の設定により、Data Transformsを使用してOCI Object StorageへIcebergフォーマットのデータを書き込むことが可能になりました。



