この記事は、2024/12/3に公開された「Secure Data Sharing and Interoperability Powered by Iceberg REST Catalog」の翻訳です。
多くの企業では、各種の部門やデータドメインで、多種多様なデータプラットフォームやテクノロジースタックが導入されています。何十年もの間、企業は大規模で多様なビッグデータ環境からタイムリーに有意義かつ実用的な洞察を引き出そうとして、その規模や処理速度、正確性の課題と格闘してきました。さまざまなアーキテクチャパターンやパラダイムを導入したにもかかわらず、「データの水たまり (局地的に点在するデータ)」やサイロができて、相互運用不可能なデータ形式が存在しています。絶えず発生するデータの重複、抽出・変換・ロード (ETL) の複雑なパイプライン、無秩序に拡大するインフラストラクチャーによって、ソリューションにかかる費用が法外に上昇した結果、価値実現までの時間、市場投入までの時間、全体的な総所有コスト (TCO)、投資利益率 (ROI) に悪影響が及んでいます。
Apache Iceberg を搭載した Cloudera のオープンデータレイクハウスは、こうしたビッグデータにまつわる課題を解決するために、統合およびキュレーションされ、共有と相互運用が可能なデータレイクを提供します。このデータレイクには Iceberg と互換性のあるさまざまなコンピューティングエンジンやツールからアクセスできます。
さらに、Apache Iceberg REST カタログによってアクセシビリティが一層向上し、多種多様なデータ作成者とデータ利用者が、オープンスタンダードの RESTful API 仕様を介して Iceberg テーブルデータの共有と利用を簡単に行うことができます。
Cloudera のオープンデータレイクハウスに Apache Iceberg と REST カタログが搭載されたことで、Cloudera 以外のエンジンとのデータ共有を安全に実行できるようになりました。
Cloudera のオープンデータレイクハウスを利用すれば、データプラクティショナーの生産性が向上し、新しい AI アプリケーションやデータアプリケーションのリリースを早めることができます。主な特徴は以下のとおりです。
データ共有とは、Iceberg テーブルなど Cloudera で管理されているデータを、Cloudera 環境外の外部ユーザー (クライアント) と共有する機能です。Iceberg テーブルのデータをクライアントと共有すれば、クライアントは Iceberg REST カタログをサポートする Amazon Athena、Trino、Databricks、Snowflake などのサードパーティーエンジンを使用してデータにアクセスできるようになります。
このブログでは、Cloudera と Amazon Athena ノートブックのデータ共有方法に関するソリューションについて説明します。Cloudera は、Iceberg REST カタログ API 仕様に基づいて実装された Hive Metastore (HMS) REST カタログサービスを使用します。このサービスをクライアントが利用できるようにするには、KNOX トークン管理システムで定義された OAuth 認証メカニズムを使用し、Apache Ranger ポリシーでクライアントのデータ共有を定義します。
これにより、Amazon Athena が Iceberg REST カタログ OpenAPI を使用して、Cloudera の Iceberg テーブルに保存されているデータに対してクエリを実行できるようになります。
クラウドの Cloudera で次のコンポーネントをインストールし、設定しておく必要があります。
また、AWS に関する以下の前提条件を満たしておく必要があります。
この例では、Cloudera を使用して Iceberg テーブル上で作成および更新されているデータに Amazon Athena からアクセスする方法を説明します。
Cloudera Public Cloud のインストールと設定については、ユーザードキュメントを参照してください。
Hue を起動して以下のクエリを実行し、1つのデータベースと複数のテーブルを作成します。
CREATE DATABASE IF NOT EXISTS airlines_data;
DROP TABLE IF EXISTS airlines_data.carriers;
CREATE TABLE airlines_data.carriers (
carrier_code STRING,
carrier_description STRING)
STORED BY ICEBERG
TBLPROPERTIES ('format-version'='2');
DROP TABLE IF EXISTS airlines_data.airports;
CREATE TABLE airlines_data.airports (
airport_id INT,
airport_name STRING,
city STRING,
country STRING,
iata STRING)
STORED BY ICEBERG
TBLPROPERTIES ('format-version'='2');
Hue で以下のクエリを実行し、データを各 Iceberg テーブルにロードします。
INSERT INTO airlines_data.carriers (carrier_code, carrier_description)
VALUES
("UA", "United Air Lines Inc."),
("AA", "American Airlines Inc.")
;
INSERT INTO airlines_data.airports (airport_id, airport_name, city, country, iata)
VALUES
(1, 'Hartsfield-Jackson Atlanta International Airport', 'Atlanta', 'USA', 'ATL'),
(2, 'Los Angeles International Airport', 'Los Angeles', 'USA', 'LAX'),
(3, 'Heathrow Airport', 'London', 'UK', 'LHR'),
(4, 'Tokyo Haneda Airport', 'Tokyo', 'Japan', 'HND'),
(5, 'Shanghai Pudong International Airport', 'Shanghai', 'China', 'PVG')
;
Hue で以下のクエリを実行します。このテーブルには2つの carrier レコードが表示されます。
SELECT * FROM airlines_data.carriers;
「rest-demo」ロールに対して、Carriers テーブルへの読み取りアクセスを許可し、かつ Airports テーブルへの読み取りアクセスを許可しないポリシーを作成します。
Ranger で [Settings] > [Roles] に移動し、対象のロールが利用可能でグループに割り当て済みであることを確認します。
この例では、「UnitedAirlinesRole」という名前のロールを使用して、データを共有できるようにします。
[Ranger] > [Hadoop SQL] に移動して、ポリシーを追加します。
以下のような設定で新しいポリシーを作成し、保存します。
6. 「Spark_primary」ワークグループで Amazon Athena ノートブックを作成する
a. ノートブックに名前を付けます。
b. 他の Apache Spark プロパティを設定し、Cloudera Iceberg REST カタログを使用できるようにします。[Edit in JSON] ボタンを選択します。以下のコマンドをコピーし、<cloudera-knox-gateway-node>、<cloudera-env-name>、<client-id>、および <client-secret> を適切な値に置き換えます。置き換える値を決めるにあたっては、REST カタログの設定に関するブログを参照してください。
{
"spark.sql.catalog.demo": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.demo.default-namespace": "airlines",
"spark.sql.catalog.demo.type": "rest",
"spark.sql.catalog.demo.uri": "https://<cloudera-knox-gateway-node>/<cloudera-env-name>/cdp-share-access/hms-api/icecli",
"spark.sql.catalog.demo.credential": "<client-id>:<client-secret>",
"spark.sql.defaultCatalog": "demo",
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
}
c. [Create] ボタンをクリックすると、新しいノートブックが作成されます。
以下のコマンドを 1 つずつ実行して、Cloudera REST カタログで何を利用できるのかを確認します。以下のことが可能です。
spark.sql(show databases).show();
spark.sql(use airlines_data);
spark.sql(show tables).show();
spark.sql(SELECT * FROM airlines_data.carriers).show()
Hue で以下のクエリを実行し、Carriers テーブルに行を1つ追加します。
INSERT INTO airlines_data.carriers
VALUES("DL", "Delta Air Lines Inc.");
Hue で以下のクエリを実行し、Carriers テーブルに行を1つ追加します。
SELECT * FROM airlines_data.carriers;
以下のクエリを実行すると、3つの行が返されるはずです。これは、REST カタログでメタデータポインターの変更が自動的に処理され、最新のデータを確実に取得できるようになることを示します。
spark.sql(SELECT * FROM airlines_data.carriers).show()
以下のクエリを実行します。このクエリは想定どおり失敗し、Airports テーブルからデータが返されることはありません。これは、Ranger ポリシーが適用され、このテーブルへのアクセスが拒否されているためです。
spark.sql(SELECT * FROM airlines_data.airports).show()
この記事では、Cloudera と Amazon Athena の間でのデータ共有を設定する方法について説明しました。具体的には、Amazon Athena を使用して Iceberg REST カタログ経由で接続し、Cloudera で作成および管理されているデータに対してクエリを実行しました。
Cloudera のオープンデータレイクハウスの主な特徴は以下のとおりです。
Amazon Athena はサーバーレスのインタラクティブな分析サービスであり、ペタバイト規模のデータをその場で簡単かつ柔軟に分析できます。また、Apache Spark を使用してインタラクティブなデータ分析を簡単に実行できます。リソースを計画、設定、管理する必要はありません。Athena で Apache Spark アプリケーションを実行すると、Spark コードを送信して、処理された結果を直接受け取ることができます。また、Amazon Athena コンソールのシンプルなノートブックエクスペリエンスで、Python または Athena ノートブック API を使用して Apache Spark アプリケーションを開発できます。Iceberg REST カタログと Amazon Athena の統合により、EMR Spark の拡張性と処理能力を活用して、Cloudera Iceberg テーブルに保存された大量のデータセットに対し、データ処理、分析、機械学習のワークロードを大規模に実行できます。
データプラットフォームの多様化にまつわる課題に直面し、規模、スピード、データの正確性に関連する問題に悩まされている企業にとって、このソリューションは大きな価値をもたらします。具体的には、データ重複の問題を減らし、複雑な ETL パイプラインを簡素化し、コストを削減しながら、ビジネスの成果を向上させることができます。
Cloudera の詳細や使い方については、「Getting Started」を参照してください。Cloudera のオープンデータレイクハウスで利用できる機能の詳細についてはオープンデータレイクハウスのページを、Cloudera が提供している製品の詳細については Cloudera.com をご覧ください。Amazon Athena の使い方については、「Amazon Athena の開始方法」を参照してください
This may have been caused by one of the following: