メインコンテンツまでスキップ
バージョン: 4.x

SeaweedFSとの統合

SeaweedFS は、S3互換オブジェクトAPIとApache Iceberg REST Catalogの両方を同一の weed プロセスから公開する分散ストレージシステムです。Parquetデータと Iceberg メタデータは1つの実行ファイルによって提供され、1つのS3認証ペアによって認証されます。

このページでは、SeaweedFSをDorisベースのIceberg lakehouseに変換する最小限の設定を示します。同じエンドツーエンドのパスは、SeaweedFSリポジトリの TestDorisIcebergCatalog 統合テストで実行されており、SeaweedFSミニクラスターを起動し、それに対してDoris Icebergカタログを登録し、PyIcebergで行を書き込み、apache/doris:doris-all-in-one-2.1.0 からそれらを読み戻します。

Iceberg lakehouseにSeaweedFSを使用する理由

今日の典型的なlakehouseスタックは3つの層を繋ぎ合わせています:

  • オブジェクトストレージ(S3または互換)
  • スタンドアロンのIcebergカタログ(Hive Metastore、Glue、Polaris、Lakekeeper、Nessie、...)
  • クエリエンジン(Doris、Spark、Trino、...)

SeaweedFSは最初の2つを1つのプロセスに統合します。同じ weed 実行ファイルは以下の両方です:

  • parquetファイルを保持するS3互換オブジェクトストア
  • テーブルメタデータを保持するIceberg REST Catalog

そのため、Dorisは2つのシステムではなく1つのシステムと通信します。実用的な影響:

  • より少ない可動部品。 Hive Metastore、Glue、別個のカタログをバックアップするPostgres、プロビジョニングするSTSロールが不要です。
  • よりシンプルなデプロイメント。 1つの実行ファイル、1つのIAM設定、DorisのIceberg RESTクライアントとS3リーダーによって共有される1つのS3認証ペア。
  • ローカルまたはオンプレミス対応。 パス内のいずれもクラウドネイティブサービスを必要としません。同じセットアップがラップトップ、単一VM、またはKubernetesクラスターで動作します。
  • メタデータパスでの低レイテンシ。 カタログ状態はデータを提供するのと同じSeaweedFS filerに存在するため、namespaceとテーブルルックアップは別のサービス境界をまたぎません。
  • ディスク上でのS3ネイティブ。 テーブルはS3バケット内の標準Icebergディレクトリとして保存されます。任意のS3クライアント(rclone、aws s3、Spark、Trino、Dremio、RisingWave)がDorisと並行してそれらを読み取りまたは複製できます。

アーキテクチャ的には:

Doris
|
v
Iceberg tables
|
v
SeaweedFS (S3 storage + REST catalog)

小規模チームや社内プラットフォームにとって、これは独立したメタストアサービスに依存せずにレイクハウスを構築するクリーンな方法です。

1. SeaweedFSを開始する

github.com/seaweedfs/seaweedfsからweedをビルドまたはインストールします。

アクセスキーにS3への完全なアクセス権限を付与するIAM設定を作成します。同じキーはIceberg RESTエンドポイントのOAuth2クライアントとしても使用されます:

{
"identities": [
{
"name": "doris",
"credentials": [
{
"accessKey": "AKIAIOSFODNN7EXAMPLE",
"secretKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
}
],
"actions": ["Admin"]
}
]
}

Iceberg REST エンドポイントと事前作成されたテーブルバケットを使用して、シングルプロセスクラスターを開始します:

weed mini \
-ip $(hostname -I | awk '{print $1}') \
-dir /var/lib/seaweedfs \
-s3.config /etc/seaweedfs/iam_config.json \
-tableBucket iceberg-tables

weed miniは、master、volume、filer、S3、およびIceberg RESTカタログを1つのプロセスで実行します。デフォルトポート:

ComponentPortOverride flag
Master HTTP9333-master.port
Filer HTTP8888-filer.port
S38333-s3.port
Iceberg REST8181-s3.port.iceberg

-tableBucket iceberg-tablesは起動時にS3 Tablesバケットを作成します。これはDorisが書き込むIceberg対応バケットタイプです。

カタログに到達可能であることを確認するには:

curl -s http://SEAWEED_HOST:8181/v1/config | jq .

2. DorisでIcebergカタログを登録する

CREATE CATALOG seaweedfs PROPERTIES (
"type" = "iceberg",
"iceberg.catalog.type" = "rest",
"uri" = "http://SEAWEED_HOST:8181",
"warehouse" = "s3://iceberg-tables",
"credential" = "AKIAIOSFODNN7EXAMPLE:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"s3.endpoint" = "http://SEAWEED_HOST:8333",
"s3.access_key" = "AKIAIOSFODNN7EXAMPLE",
"s3.secret_key" = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"s3.region" = "us-west-2",
"use_path_style" = "true"
);

注記:

  • credential = "<access_key>:<secret_key>" は、DorisのIceberg RESTクライアントによってOAuth2クライアント認証情報として転送されます。SeaweedFSは、S3エンドポイントを保護するのと同じIAM設定に対してこれらを検証します。
  • s3.* プロパティは、Doris独自のparquetリーダーとライターによって使用されます。これらは同じweedプロセス(同じホスト、同じキーペア)を指しています。
  • use_path_style = "true" は、SeaweedFSがデフォルトでpath-style形式でS3を提供するため、必須です。
  • 統合テストではこれらの正確なプロパティを使用します。正規形式については、createDorisIcebergCatalog を参照してください。

カタログが登録される前にDoris外部で(例えばPyIcebergで)名前空間やテーブルを作成した場合は、メタデータキャッシュをリフレッシュしてください:

REFRESH CATALOG seaweedfs;

3. カタログを使用する

USE seaweedfs;

CREATE DATABASE IF NOT EXISTS demo;

USE seaweedfs.demo;

CREATE TABLE iceberg_smoke (
id BIGINT,
label STRING
);

INSERT INTO iceberg_smoke VALUES (1, 'one'), (2, 'two'), (3, 'three');

SELECT id, label FROM iceberg_smoke ORDER BY id;

期待される出力:

+----+-------+
| id | label |
+----+-------+
| 1 | one |
| 2 | two |
| 3 | three |
+----+-------+

これは SeaweedFS 統合テストが実行するのと同じパスです:Iceberg REST カタログを通じて作成された namespace とテーブル、PyIceberg を介して追加された行、そして標準的な S3 と Iceberg メタデータフローを通じて Doris によって提供される読み取りです。

本番環境での注意事項

  • 本番環境のクラスタでは、weed miniweed masterweed volumeweed filer、および weed s3 -iceberg.port=8181 に置き換えてください(または SeaweedFS Helm チャートを使用してください)。Doris 側の設定は同一です — ホストとポートのみが変更されます。
  • OAuth2 クレデンシャルは S3 アクセスキーです。Doris のカタログアクセスをローテーションするには、それを保持する IAM アイデンティティをローテーションします。これは任意の S3 ユーザーをローテーションするのと同じ方法です。
  • Iceberg テーブルのメンテナンス(コンパクション、スナップショットの期限切れ、孤立したファイルの削除、マニフェストの書き換え)は SeaweedFS に組み込まれており、同じバケットに対して実行されます。詳細については SeaweedFS Iceberg Catalog wiki を参照してください。

参考資料