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