公開日:2024年2月26日
寄稿者:Dave Bergmann

Apache Icebergとは?

Apache Icebergは、大規模な分析テーブル用の高性能なオープンソース形式であり、ビッグデータ用のSQLテーブルの使用を容易にし、それらのテーブルをApache Spark、Trino、FlinkPrestoHive、Impalaなどのエンジンと安全に統合できるようにします。

Icebergは、オープン・テーブル形式の仕様に加えて、ストレージ・エンジン、クエリ・エンジン、実行エンジンがその形式に従ってテーブルとスムーズにやり取りできるようにする一連のAPIおよびライブラリーで構成されています。

Icebergテーブル形式は、他のテーブル形式では通常利用できない機能を提供できるため、ビッグデータエコシステムの不可欠な部分となっています。Icebergでは、各テーブルに保存されている多数のメタデータを使用することで、コストのかかるテーブルの書き換えやテーブルの移行を必要とせずに、スキーマの進化、パーティションの進化、テーブルバージョンのロールバックが可能になります。これはストレージ・システムに完全に依存せず、複数のデータ・ソースをサポートし、ファイル・システムに依存しません。

もともとはNetflixとAppleのデータ・エンジニアによって2017年にApache Hiveの欠点に対処するために作成されたIcebergは、オープンソースとなり、その翌年にはApache Software Foundationに寄付されました。2020年にトップレベルのApacheプロジェクトになりました。

Apache Icebergのスピード、効率、信頼性、総合的なユーザーフレンドリーさは、あらゆる規模のデータ処理の簡素化と調整に役立ちます。これらの強みにより、IBM watsonx.dataを含む多くの主要なデータウェアハウス 、データレイク、 データレイクハウスでテーブル形式が選ばれるようになりました。NetezzaおよびDb2 Warehouse

Apache Icebergを使用する理由は?

Iceberg は、ACIDトランザクション、つまり原子性、一貫性、独立性、耐久性を保証することで正確性を維持するデータ交換を可能にする数少ないオープンソース・テーブル形式の1つです。

Icebergの起源は、大規模なデータレイク環境におけるApache Hiveテーブルの実際的な制限に対処するための取り組みでした。Apache IcebergプロジェクトのPMC会長であり、Netflixの(元)シニア・エンジニアであるRyan Blue氏によると、「多くのさまざまなサービスやエンジンがHiveテーブルを使用していました。しかし、問題は、その正確性の保証がなかったことです。アトミック・トランザクションはありませんでした」と2021年の会議で述べました。「あるシステムからの変更によって、別のシステムが間違ったデータを取得することがあり、このような問題が発生したため、念のため、これらのサービスは使用せず、テーブルの変更も行いませんでした。」1

Apache Hive自体は、Apache Hadoopクラスターを SQLでアクセス可能なリレーショナルデータベースと同様に動作させる手段として生まれました。静的データに対しては効果的に機能しますが、データ・セットの変化にはあまり適応しません。変更は、さまざまなアプリケーションやユーザー間で手動で調整する必要があります。そうしないと、大規模なデータセットが破損したり不正確になったりするリスクがあります。

動的な環境での正確性を保証するために、Icebergはすべてのデータトランザクションが次の4つのACID特性をすべて発揮するように設計されました

原子性

データへのすべての変更は、あたかも単一の操作であるかのように実行されます—つまり、すべての変更が実行されるか、まったく実行されません。例えば、金融データ取引では、一方の口座から引き落としが行われた場合、それに対応してもう一方の口座にクレジットが行われることがatomicityによって保証されます。

一貫性

トランザクション前の全体的なデータ状態とトランザクション後のデータ状態の間に矛盾はありません。金融取引の例を続けると、一貫性は、2つの口座間に存在する資金の合計が、取引前と同じであることを取引後に保証します。

分離

トランザクションの中間状態は、他のトランザクションからは見えません。同時実行トランザクション—同じデータセットに対して同時に実行されるトランザクション—は、シリアライズされているかのように扱われます。この金融取引では、分離により、他のトランザクションによって、振替口座または与信口座に資金が組み込まれていることが保証されますが、両方(またはどちらにも)確認することはできません。

耐久性

トランザクションが成功すると、システム障害が発生した場合でも、データの変更が保持されます。この財務の例では、これは、直後にシステム全体の停電が発生した場合でも、トランザクションが完了したままであることを意味します。

Apache Iceberg 対 Delta Lake 対 Apache Hudi

Apache Icebergテーブル形式は、ACIDトランザクションを提供する他の2つのオープンソース・データ・テクノロジーとよく比較されます:デルタレイクは、最初にDatabricksが開発した最適化されたストレージ・レイヤーであり、ファイルベースのトランザクション・ログとスケーラブルなメタデータ処理でParquetデータ・ファイルを拡張します。もう1つはApache Hudi—これは「Hadoop Upserts ELEts and Incrementals」の略で—2016年にUberによって開発されました。

Synvertが2022年に実施した調査では、ランダムなデータを生成し、3つのテクノロジーのベンチマークに使用するためにJSON形式でAWS S3バケットに保管しました。それらのテストは最終的に、Icebergの最適化されたテーブル・フォーマットが、テストされたすべてのメトリクスにおいて、Delta LakeとApache Hudiの両方よりも優れた性能を発揮することが実証されました。2

  • ストレージ:Icebergテーブルの結果のファイル・サイズは、Delta LakeやHudiよりも大幅に小さくなったため、ストレージの最適化に大きな利点がありました。

  • 挿入操作:挿入操作では、Icebergが最速の性能—つまり、最短のランタイムを記録しました。IcebergとDelta LakeはどちらもHudiよりも大幅に高速でした。

  • 更新操作:更新操作では、IcebergはDelta LakeとHudiの両者よりも大幅に高速でした。注目すべきことは、他とは異なり、Icebergのランタイムはレコード総数から大幅に増加していませんでした。調査内でテストした最大ワークロード—5億レコード—では、Icebergはデルタレイクのほぼ10倍高速でした。

  • 除去操作:同様に、Icebergは除去操作において、どちらの代替案よりも数倍高速でした。 

Apache Icebergはどのように機能しますか?

Icebergは、メタデータ・ファイルの3層階層を実装し、多様なファイル形式と絶え間ない変更全体にわたって、テーブル・データの正確性と調整を確保します。

JavaPythonで記述され、Scala API でも提供される Icebergは、Apache Parquet、Apache Avro、Apache ORCなど、さまざまなビッグデータファイル形式をサポートしています。従来のデータベースのSQLテーブルと同様の機能を、ファイル形式やベンダーにとらわれない方法で提供し、複数のエンジンが同じデータ・セットで動作できるようにします。

Icebergテーブルのアーキテクチャーは、Icebergカタログメタデータ層データ層の3つの層で構成されています。

Icebergカタログ

Icebergカタログ自体はメタデータレイヤーの上にあり、データは後で表示されます。これは、氷山の一角が水面の上にあるのとよく似ています。特定のテーブルの名前を現在のメタデータファイルの場所にマップする最新(または「現在の」)メタデータポインタを保管します。組み込みのカタログに加えて、IcebergはHive MetaStoreやAWS Glueなどの他のカタログフレームワークもサポートしています。

Icebergカタログ・レベルでの操作はアトミックであり、これは取引の正確性を確保するために不可欠です。

そのため、クエリ・エンジンは、クエリ・エンジンが読み取ろうとしているテーブルの現在のメタデータ・ファイルの場所を提供するIcebergカタログにおいて、SELECTクエリを開始します。

メタデータ層

Icebergメタデータ層は、メタデータ・ファイル、目録リスト、目録ファイルを—降順—に構成しています。

メタデータ・ファイル
メタデータ・ファイルには、テーブルのスキーマ、パーティション情報、現在のスナップショット、以前の状態のスナップショットなど、テーブルのメタデータが保管されます。Icebergカタログのテーブルのエントリーから現在のメタデータ・ファイルを指定されたクエリ・エンジンは、[current-snapshot-id]値を使用して、[snapshots]配列のエントリーを見つけます。そこから、テーブルのマニフェスト・リストを見つけて開くことができます。

マニフェスト・リスト
マニフェスト・リストは、マニフェスト・ファイルと、その中にある各データ・ファイルの場所、関連付けられているスナップショット、属するパーティションなど、そのファイルと重要な情報のリストです。この段階では、特定の最適化とフィルタリング機能が利用可能です。

マニフェスト・ファイル
マニフェスト・ファイルは、データ・ファイルとその関連する詳細、メタデータ、統計を追跡します。これにより、Hiveテーブル形式に対するIcebergテーブル形式の基本的な利点の1つである、ファイル・レベルでデータを追跡できる機能が高まっています。この段階では、各[data-file]オブジェクトの[File-path] 値を使用して、そのファイルを検索し、開くことができます。

データレイヤー

データ層は、その名のとおり、メタデータ層の下に存在し、究極のファイルそのものを含みます。

Apache Icebergの主な機能

Apache Icebergは、データ管理を改善し、簡素化するための便利な機能を多数提供します。

隠しパーティション分割
Icebergは、パーティション分割とクエリのすべての詳細を内部で処理します。Icebergの隠れたパーティショニングにより、テーブルにクエリを実行する際に、ユーザーにパーティション・レイアウト情報を提供する作業が不要になります。ユーザーは、正確なクエリ結果を得るために、パーティション列を自分で保守したり、物理的なテーブル・レイアウトを理解したりする必要がなくなります。

これにより、Icebergのパーティショニングは非常にユーザーフレンドリーになるだけでなく—事前に作成されたクエリを壊すことなく、パーティションのレイアウトを時間の経過とともに変更できるようになります。パーティションの仕様が進化しても、テーブル内のデータ(およびそのメタデータ)は影響を受けません。進化後にテーブルに書き込まれた新しいデータだけが新しい仕様でパーティション化され、この新しいデータのメタデータは別に保持されます。

スキーマの進化
Icebergは、スキーマの進化をネイティブにサポートします。これにより、ユーザーは複雑なデータ移行を行うことなくテーブルスキームを変更することができ、進化するデータ構造への適応が大幅に効率化されます。
 

タイム・トラベル
Icebergを使用すると、ユーザーはさまざまな時点でのIcebergデータのスナップショットを通じて、時間を遡ることができます。これは、監査、デバッグ、コンプライアンス・チェックなどのさまざまなユースケースにとって価値があります。


データのコンパイルとフィルタリング
Icebergは、小さなファイルを大きなファイルにマージしてメタデータのオーバーヘッドを削減する圧縮オプションや、クエリ実行中の不要なデータの読み取りを削減するブルーム・フィルターなど、クエリの性能を最適化する多数のインデックス作成機能を提供しています。

関連ソリューション
IBM watsonx.data™

オープンデータレイクハウスアーキテクチャー上に構築された目的に合ったデータ・ストアであるwatsonx.dataは、あらゆる場所のすべてのデータに対してAIワークロードを拡張し、データにアクセスし、コストのかかるワークロードを最適化します。

IBM watsonx.dataはこちら

IBM Db2 Warehouse

あらゆる種類のデータを使用して、ミッションクリティカルな分析とAIワークロードをどこからでも実行できます。IBM Db2 Warehouseは、常時稼働のワークロードに対するコストとパフォーマンスの目標を満たし、あらゆるデータへのシンプルかつ管理されたアクセスを提供し、ハイブリッドクラウド全体のデータのサイロ化を解消します。

 

IBM Db2 Warehouseの詳細はこちら

IBM® Netezza

コストが効率的で、統一され、監視されるクラウド・データウェアハウスで分析とAIを拡張します。ParquetやApache Icebergなどのオープンフォーマットをサポートしているほか、データレイクやIBM watsonx.dataとのネイティブ統合も可能です。lakehouse、Netezzaは、データエンジニア、データサイエンティスト、データアナリストがCloud Object Storage上でETLやデータ移動を追加することなく複雑なワークロードを実行できるようにします。

IBM Netezzaの詳細はこちら

データレイク・ソリューション

オープン・データレイクハウスに含まれるあらゆるデータを使用して、アプリケーション、分析、AIを強化します。従来のデータウェアハウスと異なり、データレイクハウスは映像、音声、ログ、テキスト、ソーシャル・メディア、センサーのデータ、ドキュメントを処理でき、アプリ、分析、AIを強化します。データ・ファブリック・アーキテクチャーの一部として構築することもできるので、データの所在に関わらず、適切なタイミングで適切なデータを提供できます。

データレイク・ソリューションの詳細はこちら
次のステップ

オープンデータレイクハウスアーキテクチャー上に構築された目的に合ったデータ・ストアであるwatsonx.dataは、あらゆる場所のすべてのデータに対してAIワークロードを拡張し、データにアクセスし、コストのかかるワークロードを最適化します。

無料評価版を試す 対話式デモを見る
脚注

すべてのリンクはibm.com外部にあります。
1
Apache Iceberg: The Hub of an Emerging Data Serviceエコシステム?」 (リンクはibm.com外部にあります)、Datanami, 2021年2月8日
2 「Clash of ACID Data Lakes: ComparingデータレイクハウスFormats」 (リンクはibm.com外部にあります)、Data洞察、2022年8月9日