Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Hive Metastoreを通して学ぶIceberg REST Catalog ― 仕様から...

Hive Metastoreを通して学ぶIceberg REST Catalog ― 仕様から実装まで

Avatar for okumin

okumin

May 20, 2026

More Decks by okumin

Other Decks in Programming

Transcript

  1. 本日話す内容 - Apache Hiveとは - Icebergテーブルフォーマット復習 - Iceberg Catalogについて -

    基本的な操作手順をHive CatalogとREST Catalogで比較 - 読み込みパス - 書き込みパス - REST Catalogの高度な機能の解説 - 認証・認可 - Credential Vending - Metrics Reporting - Server-Side Planning
  2. “Distributed Data Warehouse at Massive Scale” - Hive Metastore: メタデータリポジトリ

    - HiveServer2: SQLゲートウェイ - Hive on Tez, Hive LLAP: 分散実行エンジン RDBMS HDFS Object Storage HiveServer2 Hive Metastore Hadoop Hive on Tez Kubernetes Hive LLAP Trino, Spark, Flink
  3. 今日話す部分 - Hive Metastore: メタデータリポジトリ - HiveServer2: SQLゲートウェイ - Hive

    on Tez, Hive LLAP: 分散実行エンジン RDBMS HDFS Object Storage HiveServer2 Hive Metastore Hadoop Hive on Tez Kubernetes Hive LLAP Trino, Spark, Flink
  4. Iceberg関連データ Iceberg Catalog 有効なMetadata Fileへのポインター Metadata File スキーマや有効なスナップショット一覧 Manifest List

    スナップショットに含まれるManifest File一覧 Manifest File Data File一覧 Data File 実レコードを含むParquetファイルなど 出典: Spec - Apache Iceberg™ https://iceberg.apache.org/spec/
  5. カタログの種類 カタログが持つ機能 - テーブル名からメタデータファイルの位置を解決する - その対応を安全に更新できる Spark + Hadoop Catalog

    Spark + JDBC Catalog Spark + Hive Catalog Spark + REST Catalog HDFS, S3 PostgreSQL, MySQL Iceberg REST API Hive Metastore Hadoop FileSystem API JDBC Driver Hive Thrift Client Iceberg REST Client
  6. Iceberg REST Catalog API実装 商用サービス - Databricks Unity Catalog -

    Cloudera Iceberg REST Catalog - Snowflake Open Catalog - AWS Glue - Amazon S3 Tables - Google Cloud's Lakehouse - Microsoft Fabric OneLake - Dremio Open Catalog OSS実装 - Unity Catalog - Apache Polaris - Apache Gravitino - Lakekeeper - Project Nessie
  7. Hive Metastore参戦 OSS実装 - Unity Catalog - Apache Polaris -

    Apache Gravitino - Lakekeeper - Project Nessie - Apache Hive - Hive Metastore 商用サービス - Databricks Unity Catalog - Cloudera Iceberg REST Catalog - Snowflake Open Catalog - AWS Glue - Amazon S3 Tables - Google Cloud's Lakehouse - Microsoft Fabric OneLake - Dremio Open Catalog
  8. Iceberg REST Catalog API backed by Hive Metastore - Iceberg

    REST APIリクエストをHive Catalogの操作に変換している - 各種セマンティクス(例: テーブル名大文字小文字の区別など)はHive Catalogと同じ - Hive MetastoreにAPIエンドポイントを足す or Iceberg REST API専用サーバをデプロイ Trino REST Catalog Hive Metastore Iceberg REST API Hive Catalog API Server Iceberg REST API Hive Metastore Thrift API Trino REST Catalog REST API RDBMS RDBMS Thrift RPC REST API Embedded Mode Standalone Mode (>= 4.3)
  9. Hive Catalogの読み込みパス (1) Hive Metastore (Thrift) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (1) GetTableRequest (Thrift) (2) SELECT Current Pointer (3) s3://path/to/000-metadata.json (4) Hive Table
  10. Hive Catalogの読み込みパス (2) Hive Metastore (Thrift) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (5) GET s3://path/to/000-metadata.json (6) Schema, List of snapshots (7) GET s3://path/to/snap-abc.avro (8) List of Manifest Files (9) GET s3://path/to/m0.avro (10) List of Data Files (11) GET s3://path/to/000.parquet (12) Records
  11. REST Catalogの読み込みパス (1) Hive Metastore (REST) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (1) Load Table (Iceberg REST) (2) SELECT Current Pointer (3) s3://path/to/000-metadata.json
  12. REST Catalogの読み込みパス (2) Hive Metastore (REST) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (6) Iceberg Table (4) GET s3://path/to/000-metadata.json (5) Schema, List of snapshots
  13. REST Catalogの読み込みパス (3) Hive Metastore (REST) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (7) GET s3://path/to/snap-abc.avro (8) List of Manifest Files (9) GET s3://path/to/m0.avro (10) List of Data Files (11) GET s3://path/to/000.parquet (12) Records
  14. まとめ: 読み込みパス - Metadata Fileへのアクセスがカタログ経由に - Metadata Fileをキャッシュしたりも(HIVE-29035) Hive Catalog

    REST Catalog Hive Metastore (Thrift) Metadata Pointer Metadata File (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) Hive Metastore (REST) Metadata Pointer Metadata File (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet)
  15. Hive Catalogの書き込みパス (1) Hive Metastore (Thrift) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (8) 200 OK (7) PUT s3://path/to/new-metadata.json (6) 200 OK (5) PUT s3://path/to/snap-xyz.avro (4) 200 OK (3) PUT s3://path/to/new.avro (2) 200 OK (1) PUT s3://path/to/new.parquet
  16. Hive Catalogの書き込みパス (2) Hive Metastore (Thrift) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (9) LockRequest (Thrift) (10) Acquire Lock (11) Lock Acquired (12) LockResponse
  17. Hive Catalogの書き込みパス (3) Hive Metastore (Thrift) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (13) GetTableRequest (Thrift) (14) SELECT Current Pointer (15) Current Pointer (16) Hive Table ロック前後でポインターが変化してい たらリトライ or Abort
  18. Hive Catalogの書き込みパス (4) Hive Metastore (Thrift) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (17) AlterTableRequest (Thrift) (18) Updater Pointer
  19. REST Catalogの書き込みパス (1) Hive Metastore (REST) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (6) 200 OK (5) PUT s3://path/to/snap-xyz.avro (4) 200 OK (3) PUT s3://path/to/new.avro (2) 200 OK (1) PUT s3://path/to/new.parquet
  20. REST Catalogの書き込みパス (2) Hive Metastore (REST) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (7) Update Table w/ diff (9) 200 OK (8) PUT s3://path/to/new-metadata.json
  21. REST Catalogの書き込みパス (3) Hive Metastore (REST) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (11) Lock acquired (10) Acquire Lock
  22. REST Catalogの書き込みパス (4) Hive Metastore (REST) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (13) Current Pointer (12) SELECT Current Pointer ロック前後でポインターが変化してい たらリトライ or Abort
  23. REST Catalogの書き込みパス (5) Hive Metastore (REST) Metadata Pointer Metadata File

    (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) (14) Update Pointer
  24. 書き込みパスまとめ ロックの取り方などを抽象化できる Hive Catalog REST Catalog Hive Metastore (REST) Metadata

    Pointer Metadata File (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet) Hive Metastore (Thrift) Metadata Pointer Metadata File (JSON) PostgreSQL Amazon S3 Trino Manifest List (Avro) Manifest File (Avro) Data File (Parquet)
  25. 認証・認可 - ユーザー名の解決・エンドポイントレベルの認可 - OAuth 2: HIVE-29020にてサポート - AWS SigV4

    - Bearer Token - テーブルレベルアクセスコントロール - Apache Ranger - AWS Lake Formation Catalog Server Policy Store Identity Provider She is Alice Alice can update Table X and Y
  26. OAuth 2.0 + Authorization Plugin • Iceberg REST Catalogエンドポイントを保護対象リソースとして認可 •

    OAuth 2のClaim Setを元にユーザー名の解決 • Apache Rangerなどを用いてユーザー名からテーブルレベルの読み書き権限を確認 Authorization Server E.g., Keycloak Hive Metastore Trino (1) Request Access Token Ranger Policy Store (2) Access Token (3) Request w/ Access Token (4) Token Introspection (5) Claim Set w/ ID source (7) Response JWTトークンの場合(4)と (5)は省略可 Ranger Plugin Sync (6) Check Privileges
  27. Credential Vendingがない場合 Hive Metastore w/ 🔑 Metadata File (JSON) Manifest

    List (Avro) Manifest File (Avro) Data File (Parquet) Amazon S3 Trino w/ 🔑 Hive Metastoreに /user/hive/warehouse全体の 読み書き権限 クライアントにも /user/hive/warehouse全体の 読み書き権限
  28. Credential Vendingがある場合 Hive Metastore Metadata File (JSON) Manifest List (Avro)

    Manifest File (Avro) Data File (Parquet) Amazon S3 Trino カタログが払い出したクレデンシャルを 使用 AWS STS (1) LoadTable (2) Assume Role (3) Temporary Credentials 🔑 (4) Iceberg Table w/ Temporary Credentials 🔑 (5) Access S3 w/ Temporary Credentials 🔑 リクエストされたテーブルに対して許可 された操作(GET, PUT, DELETE)の みを実行することができるクレデンシャ ル
  29. Server-Side Planning - データファイルの解決をREST Catalog側でやる - 仕様は策定済み - クライアント実装がApache Iceberg

    1.11.0で入った -> Hive Metastoreでも実装予 定? Iceberg Client Catalog Server Snapshot ID, Projection, Predicate, etc. List of Data Files
  30. おさらい: Load Tableを用いる場合のインタラクション Hive Metastore Metadata File (JSON) Manifest List

    (Avro) Manifest File (Avro) Data File (Parquet) Amazon S3 Trino Metadata Pointer PostgreSQL
  31. Server-Side Planningを使うと Hive Metastore Metadata File (JSON) Manifest List (Avro)

    Manifest File (Avro) Data File (Parquet) Amazon S3 Trino Metadata Pointer PostgreSQL (1) Submit Scan Planning w/ Scan Conditions (2) Scan Metadata (3) Locations of Data Files (4) Read Data Files
  32. 今日のまとめ - Iceberg REST Catalogがとても流行っている - Hive MetastoreもIceberg REST APIを絶賛実装中

    - REST Catalogの登場により高度な機能が導入しやすくなった - Special Thanks - レビューしてくれたTreasure AIの同僚達 - Keisuke Suzuki, Masafumi Koba