この記事について
毎週木曜の朝に開催している #データエンジニアRadio 第16回のネタとして、Oreilly から発売された Apache Iceberg - The Definitive Guide の第5章の前半部分を要約したものです。
この形式で書かれている部分は、私の感想・コメントなどです。
本文は逐語訳ではなく、細かい点を端折っているところもあるので、細かい部分も正確に知りたい方は原書をお読みください!
本
Respect
この本が発売される前の時点で、Iceberg カタログの情報をここまでまとめていたべりんぐさんまじすごい。
データエンジニアRadio
要約
この章では、複数のユーザーが読み書きをする状況下で一貫性を担保するのに欠かせない Iceberg カタログについて以下を見ていく。
- カタログの一般的な要求事項と、本番でカタログを使うための更なる要求事項
- 異なるカタログの実装とそのメリデメ、カタログ活用のための Spark の設定方法
- カタログの移行を検討するべき状況
- カタログを移行する方法
このページで翻訳したのは、最初の2つだけです。
後半の2つは・・・そのうちやるかも。
Iceberg Catalog の前提条件
Iceberg は、以下のような機能の実装を要求するカタログインターフェースを提供する。
- 既存のテーブルの一覧を表示する
- テーブルを作成する
- テーブルを削除する
- テーブルが存在するかどうかを確認する
- テーブルをリネームする
インターフェースなので、様々な実装がある。
たとえば Hive メタストア、AWS Glue、Hadoop の ファイルシステムカタログなど。
インターフェースで定義された関数を実装していることに加え、Iceberg カタログとして機能するためにカタログに求められる主要な事項として、テーブルのパスを、現在の状態とともにメタデータファイルとマッピングできることが挙げられる。
上記は一般的な要求事項であり、このマッピングをどのように実装しているかはカタログごとに異なる。
各種のカタログの実装方法の違い
たとえばファイルシステムをカタログとして利用する場合、テーブルのメタデータフォルダに version-hint.text というファイルがあり、そこに現在のメタデータファイルのバージョン番号が書き込まれる。 Hive メタストアをカタログとして使う場合、 Hive メタストアのテーブルエントリに location
というプロパティがあり、現在のメタデータファイルのロケーションを示す。
上記はカタログを Iceberg カタログ として使用する最低限の要求事項だが、カタログとして使えるかどうかと、オススメできるかどうかは別問題である。
単に使えるかどうかとオススメできるかどうかの区別は、複数のジョブが同じテーブルに同時に書き込みを行なった際に失われるデータがないかどうかによる。
開発や検証目的であればこの要件は必要ではないが、本番でデータが失われると大問題である。
開発・検証でこの要件が不要なわけではないだろう。。。
(許容度が本番に比べたらまだ高いというだけで。。。)
本番でカタログを使うときの要求事項
本番で Iceberg カタログを使うときの最も大切な要求事項は、現在のメタデータのポインタを更新する際のアトミックなオペレーションをサポートすることだ。この要求事項は、以下を保証するためにある。
-
同じ時間に同じテーブルにアクセスしているすべての読み手・書き手は、そのテーブルの同じ状態を見ていること
-
同時に書き込もうとする処理が2つある場合に、ふたつめの処理が最初の処理による変更を上書きしないこと(上書きが起きると、データの消失が起きてしまう)
カタログの比較
このセクションでは、そこそこ人気のあるカタログを、以下の観点で見ていく。
- テーブルのパスとテーブルの現在のメタデータファイルのロケーションをどのように紐づけるか
- メリデメ
- そのカタログを使うべきう状況
原書ではそれぞれのカタログの特徴が文章で書いてありますが、そのまま訳してもおもしろくないというか長いしお互いの比較もしづらいので、ここでは表にまとめてみました。
本文中で見ると字がかなり小さくて見づらいと思いますので、適宜ダウンロード・拡大するなどしてご覧ください。
どーん!
原書では、各種のカタログを使うための Spark の設定方法も書いてあるが、こちらでは紙面の都合上割愛。
他にもカタログとして使えるものはある(インメモリ、DynamoDB、Snowflakeなど)が、きりがないので代表的なものを挙げた次第。
前述の Icebergカタログの要求事項を満たしている限り、なんでも Iceberg カタログとして機能することができる。
最後に
まとめは以上です。
ここまで記事をお読みいただき、ありがとうございました!
せっかく読んだことだし、この本の翻訳プロジェクトが発足した際にはぜひ参加したいです。
Iceberg コミュニティの皆様、よろしくお願いいたします。
あと データエンジニアRadio もぜひ聞いてみてください!
毎週木曜日の朝8:00〜8:40に、Twitter の Space でやっています。
Twitter やっていない人も、以下のアーカイブから録音を聴くことができます。