Iceberg は、HDFS または Alibaba Cloud オブジェクトストレージサービス (OSS) 上のストレージを、Spark、Flink、Hive、Presto による分析で利用できるようにする、オープンソースのデータレイク向けテーブルフォーマットです。
コア機能
Apache Iceberg は、Hive データウェアハウスをクラウドへ移行するためのソリューションとして始まり、その後、クラウドベースのデータレイクサービスで標準のテーブルフォーマットとなりました。詳細については、Apache Iceberg の公式 Web サイトをご参照ください。
Iceberg は次の機能を提供します:
-
HDFS または OSS 上での低コストなデータレイクストレージ。
-
インジェストと分析のための、オープンソースのコンピューティングエンジンとのシームレスな統合。
-
完全な ACID セマンティクス。
-
行レベルのデータ変更。
-
履歴バージョンのロールバック。
-
効率的なデータフィルタリング。
-
スキーマの進化。
-
パーティションレイアウトの進化。
-
隠しパーティショニング。
次の表は、オープンソースの ClickHouse (リアルタイムデータウェアハウス)、オープンソースの Hive (オフラインデータウェアハウス)、Alibaba Cloud Iceberg (データレイク) の 3 つのアーキテクチャを比較したものです。
|
比較基準 |
サブ項目 |
オープンソース ClickHouse リアルタイムデータウェアハウス |
オープンソース Hive オフラインデータウェアハウス |
Alibaba Cloud Iceberg データレイク |
|
システムアーキテクチャ |
アーキテクチャ |
コンピューティングとストレージの結合 |
コンピューティングとストレージの分離 |
コンピューティングとストレージの分離 |
|
複数のコンピューティングエンジンのサポート |
サポートされていません |
サポートされています |
サポートされています |
|
|
オブジェクトストレージ上のデータ保存 |
サポートされていません |
一部サポートされています |
サポートされています |
|
|
HDFS 上のデータ保存 |
サポートされていません |
サポートされています |
サポートされています |
|
|
ストレージフォーマットのオープン性 |
非公開 |
オープン |
オープン |
|
|
ビジネス価値 |
即時性 |
秒 |
時間/日 |
分 |
|
コンピューティングの柔軟性 |
低い |
高い |
高い |
|
|
トランザクション |
サポートされていません |
不完全 |
サポートされています |
|
|
テーブルレベルセマンティクスの汎用性 |
低い |
低い |
非常に高い |
|
|
行レベルのデータ変更 |
サポートされていません |
限定的にサポートされています |
サポートされています |
|
|
データ品質 |
非常に高い |
高い |
高い |
|
|
運用コスト |
クエリパフォーマンス |
高い |
高い |
高い |
|
ストレージコスト |
非常に高い |
中 |
低い |
|
|
セルフサービス |
サポートされていません |
サポートされていません |
サポートされています |
|
|
リソースの伸縮性 |
一般的 |
一般的 |
非常に高い |
オープンソース Iceberg との比較
次の表は、基本機能、データ変更、コンピューティングエンジンの観点から、Alibaba Cloud Iceberg とオープンソース Iceberg を比較したものです。
√ は機能がサポートされていることを示します。x は機能がまだサポートされていないことを示します。
|
カテゴリ |
項目 |
サブ項目 |
オープンソース Iceberg |
Iceberg 商用版 (Alibaba Cloud) |
|
基本機能 |
ACID |
N/A |
√ |
√ |
|
履歴バージョンのロールバック |
N/A |
√ |
√ |
|
|
ソースおよびシンクの統合 |
バッチ |
√ |
√ |
|
|
ストリーミング |
√ |
√ |
||
|
効率的なデータフィルタリング |
N/A |
√ |
√ |
|
|
データ変更 |
スキーマの進化 |
N/A |
√ |
√ |
|
パーティションの進化 |
N/A |
√ |
√ |
|
|
コピーオンライトによる更新 |
N/A |
√ |
√ |
|
|
マージオンリードによる更新 |
読み取り |
√ |
√ |
|
|
書き込み |
√ |
√ |
||
|
コンパクション |
x |
√ |
||
|
コンピューティングエンジン |
Apache Spark |
読み取り |
√ |
√ |
|
書き込み |
√ |
√ |
||
|
Apache Hive |
読み取り |
√ |
√ |
|
|
書き込み |
√ |
√ |
||
|
Apache Flink |
読み取り |
√ |
√ |
|
|
書き込み |
√ |
√ |
||
|
PrestoDB または Trino |
読み取り |
√ |
√ |
|
|
書き込み |
√ |
√ |
||
|
プログラミング言語 |
Java |
N/A |
√ |
√ |
|
Python |
N/A |
√ |
√ |
|
|
高度な機能 |
Alibaba Cloud OSS とのネイティブ統合 |
N/A |
x |
√ |
|
Alibaba Cloud DLF とのネイティブ統合 |
N/A |
x |
√ |
|
|
ローカルデータキャッシュによる高速化 |
N/A |
x |
√ |
|
|
スモールファイルのコンパクションの自動化 |
N/A |
x |
√ |
この比較は、2021 年 9 月に、当時のオープンソース Iceberg と Iceberg の商用版を分析して作成しました。機能のサポート状況は、今後のバージョンアップにより変更される可能性があります。
シナリオ
Iceberg はデータレイクソリューションの中核コンポーネントであり、次のシナリオに適しています。
|
シナリオ |
説明 |
|
リアルタイムのデータ取り込みとクエリ |
上流データはリアルタイムで Iceberg データレイクにストリーミングされ、すぐにクエリ可能になります。たとえば、ログ記録シナリオでは、Iceberg または Spark のストリーミングジョブを開始して、ログを Iceberg テーブルに書き込みます。その後、Hive、Spark、Iceberg、または Presto を使用してデータをクエリします。ACID サポートにより、取り込みとクエリの間のアイソレーションが保証され、ダーティリードを防ぎます。 |
|
データの削除または更新 |
従来のデータウェアハウスでは、行レベルの削除や更新を効率的に実行することが困難です。通常、テーブル全体を読み取り、データを変更してから書き戻すオフラインジョブを実行する必要があります。Iceberg は、変更の粒度をテーブルレベルからファイルレベルに縮小し、効率的な部分更新を可能にします。 Iceberg データレイクでは、 |
|
データ品質管理 |
Iceberg のスキーマ検証を使用して、取り込み時に異常データを破棄するか、または追加処理を行います。 |
|
データスキーマの進化 |
Iceberg は、Spark SQL DDL ステートメントによるスキーマ変更を、履歴データの書き換えなしでサポートするため、迅速な進化が可能です。 ACID のサポートにより、スキーマ変更は既存の読み取りジョブから分離され、処理全体を通して一貫した読み取りが確保されます。 |
|
リアルタイム機械学習 |
機械学習のワークフローでは、データ処理 (クレンジング、変換、特徴抽出) が時間の大半を占めます。Iceberg は、履歴データとリアルタイムデータを 1 つの信頼できるストリームに統合し、各処理ステップをパイプライン上のノードとして扱います。これにより、バッチとストリーミングの別経路を用意する必要がなくなります。また、Iceberg はアルゴリズム開発者向けにネイティブの Python SDK も提供します。 |