すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:概要

最終更新日:Jan 11, 2025

Iceberg は、データレイク向けのオープンなテーブル形式です。 Iceberg を使用すると、Hadoop Distributed File System(HDFS)または Alibaba Cloud Object Storage Service(OSS)上に独自のデータレイクストレージサービスを迅速に構築できます。その後、オープンソースビッグデータエコシステムの Apache Flink、Apache Spark、Apache Hive、または Apache Presto などのコンピューティングエンジンを使用して、データレイク内のデータを分析できます。

機能

Apache Iceberg は、Hive データをクラウドに移行するために設計されています。複数回の更新がリリースされた後、Apache Iceberg はクラウドにデプロイされたデータレイクの標準テーブル形式になりました。 Apache Iceberg の詳細については、Apache Iceberg 公式 Web サイトをご覧ください。

Apache Iceberg は、次の機能を提供します。

  • HDFS またはオブジェクトストレージシステムに基づいて、低コストの軽量データレイクストレージサービスを構築します。

  • データの取り込みと分析のために、主流のオープンソースコンピューティングエンジンに接続します。

  • 包括的な原子性、一貫性、独立性、耐久性(ACID)セマンティクスを提供します。

  • 行レベルのデータ変更をサポートします。

  • 履歴バージョンのバックトラッキングをサポートします。

  • 効率的なデータフィルタリングをサポートします。

  • スキーマ変更をサポートします。

  • パーティション変更をサポートします。

  • 非表示パーティションをサポートします。

次の表は、システムアーキテクチャ、ビジネス価値、およびメンテナンスコストの観点から、オープンソースの ClickHouse(リアルタイムデータウェアハウス)、オープンソースの Hive(オフラインデータウェアハウス)、および Alibaba Cloud E-MapReduce(EMR)Iceberg(データレイク)を比較したものです。

項目

サブ項目

オープンソース ClickHouse

オープンソース Hive

Alibaba Cloud EMR Iceberg

システムアーキテクチャ

アーキテクチャ

統合コンピューティングおよびストレージ

分離コンピューティングおよびストレージ

分離コンピューティングおよびストレージ

複数コンピューティングエンジン

サポートされていません

サポートされています

サポートされています

オブジェクトストレージシステムでのデータストレージ

サポートされていません

完全にはサポートされていません

サポートされています

HDFS でのデータストレージ

サポートされていません

サポートされています

サポートされています

ストレージ形式のオープン性

いいえ

はい

はい

ビジネス価値

適時性

秒単位の精度

時間または日単位の精度

分単位の精度

コンピューティングの柔軟性

トランザクション

サポートされていません

完全にはサポートされていません

サポートされています

テーブルレベルのセマンティック全般性

低い

低い

優れている

行レベルのデータ変更

サポートされていません

限定的なサポート

サポートされています

データ品質

優れている

良好

良好

メンテナンスコスト

クエリパフォーマンス

非常に高い

非常に高い

ストレージコスト

セルフサービス

サポートされていません

サポートされていません

サポートされています

リソースのスケーラビリティ

優れている

Alibaba Cloud EMR Iceberg と Apache Iceberg の比較

次の表は、基本機能、データ変更、およびコンピューティングエンジンの観点から、Alibaba Cloud EMR Iceberg と Apache Iceberg を比較したものです。

説明

チェックマーク(✓)は関連項目がサポートされていることを示し、クロス記号(x)は関連項目がサポートされていないことを示します。

カテゴリ

項目

サブ項目

Apache Iceberg

EMR Iceberg

基本機能

ACID

なし

履歴バージョンのバックトラッキング

なし

ソースとシンクの統合

バッチ

ストリーミング

効率的なデータフィルタリング

なし

データ変更

スキーマ進化

なし

パーティション進化

なし

コピーオンライト更新

なし

マージオンリード更新

読み取り

書き込み

圧縮

x

x

コンピューティングエンジン

Apache Spark

読み取り

書き込み

Apache Hive

読み取り

書き込み

Apache Flink

読み取り

書き込み

PrestoDB または Trino

読み取り

書き込み

プログラミング言語

Java

なし

Python

なし

高度な機能

Alibaba Cloud OSS へのネイティブ接続

なし

x

Alibaba Cloud Data Lake Formation(DLF)へのネイティブ接続

なし

x

ローカルディスクのデータキャッシングに基づくデータアクセス高速化

なし

x

小規模ファイルの自動マージ

なし

x

説明

この表の情報は、2021 年 9 月末時点の Apache Iceberg と Alibaba Cloud EMR Iceberg の状態に関する客観的な分析に基づいて提供されています。この情報は、Apache Iceberg と EMR Iceberg の更新に基づいて変更される可能性があります。

シナリオ

Iceberg は、汎用データレイクサービスの中核コンポーネントの 1 つです。次の表に、Iceberg を使用できるシナリオを示します。

シナリオ

説明

リアルタイムでのデータの書き込みと読み取り

アップストリームデータは、クエリを実行するためにリアルタイムで Iceberg ベースのデータレイクに取り込まれます。 Flink または Spark ストリーミングジョブを実行して、ログデータをリアルタイムで Iceberg テーブルに書き込むことができます。その後、Hive、Spark、Flink、Presto などのコンピューティングエンジンを使用して、データをリアルタイムで読み取ることができます。 詳細については、「Apache Iceberg コネクタ」、「Spark ストリーミングジョブを実行してデータを Iceberg テーブルに書き込む」、「Spark を使用してデータを読み取る」、および「Apache Iceberg コネクタ」をご参照ください。 Iceberg は ACID トランザクションをサポートしており、データの書き込み操作をデータの読み取り操作から分離して、ダーティデータを回避します。

データの削除または更新

ほとんどのデータウェアハウスは、行レベルのデータの削除または更新をサポートしていません。ほとんどの場合、オフラインジョブを実行してソーステーブルからすべてのデータを読み取り、データを変更してから、変更されたデータをソーステーブルに書き込むことができます。 Iceberg を使用する場合、データの変更はテーブルではなくファイルに対して実行できます。変更操作の範囲は狭まります。このようにして、より小さな範囲に基づいて変更操作を実行することで、ビジネスデータを更新または削除できます。

Iceberg ベースのデータレイクでは、DELETE FROM test_table WHERE id > 10 に類似したコマンドを実行して、テーブル内のデータを変更できます。

データ品質の制御

Iceberg スキーマを使用して、書き込まれているデータから異常データをチェックして削除したり、異常データをさらに処理したりできます。

テーブルのスキーマの変更

Spark SQL でサポートされている DDL ステートメントを使用して、Iceberg テーブルのスキーマを変更できます。

Iceberg テーブルのスキーマを変更する場合、新しいスキーマに基づいてテーブル内のすべての履歴データをエクスポートする必要はありません。したがって、スキーマの変更速度は速くなります。 Iceberg は ACID トランザクションをサポートしており、スキーマの変更がデータの読み取り操作に影響を与えるのを防ぎます。このようにして、読み取るデータと書き込むデータは一貫性があります。

リアルタイム機械学習

機械学習のシナリオでは、データのクレンジング、変換、特性評価など、データの処理に長い時間がかかる場合があります。履歴データとリアルタイムデータを処理する必要がある場合もあります。 Iceberg は、これらのワークフローを簡素化します。 Iceberg は、データをクレンジング、変換、特性評価するための完全で信頼性の高いリアルタイムストリームを提供します。履歴データとリアルタイムデータを処理する必要はありません。 Iceberg は、機械学習アルゴリズムを使用する開発者の要件を満たすために開発された Python 用のネイティブ SDK もサポートしています。