最新レポート「エンタープライズ AI と最新のデータアーキテクチャをめぐる状況」

ダウンロードする
  • Cloudera Cloudera
  • | ビジネス

    Iceberg REST カタログによる安全なデータ共有と相互運用性の実現

    Navita Sood Headshot
    Vincent Kulandaisamy Headshot
    Jonathan Ingalls headshot
    Tamara Astakhova Headshot
    Cloudera Author Profile Picture
    Bill Zhang headshot
    Ramesh Mani headshot
    上空から撮影した碁盤の目の街並み

    この記事は、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 テーブルデータの共有と利用を簡単に行うことができます。

    REST カタログの価値提案

    • REST カタログは、Iceberg メタデータの操作のために、オープンでメタストアに依存しない API を提供し、Iceberg クライアントとメタストア/エンジンの統合を大幅に簡素化します。
    • バックエンドのメタストア実装の詳細を Iceberg クライアントから隠します。
    • Iceberg 互換のメタストアとの直接統合により、メタデータへのリアルタイムアクセスが実現します。
    • Apache Iceberg と REST カタログの組み合わせによって、エンタープライズデータアーキテクチャが大幅に簡素化され、価値実現までの時間、市場投入までの時間、全体的な TCO が削減され、ROI が向上します。

    Cloudera のオープンデータレイクハウスApache Iceberg と REST カタログが搭載されたことで、Cloudera 以外のエンジンとのデータ共有を安全に実行できるようになりました。

    Cloudera のオープンデータレイクハウスを利用すれば、データプラクティショナーの生産性が向上し、新しい AI アプリケーションやデータアプリケーションのリリースを早めることができます。主な特徴は以下のとおりです。

    • マルチエンジン対応: Apache Iceberg により、Cloudera DataFlow (NiFi)、Cloudera Stream Analytics (Flink、SQL Stream Builder)、Cloudera Data Engineering (Spark)、Cloudera Data Warehouse (Impala、Hive)、Cloudera AI (旧 Cloudera Machine Learning) などとの相互運用性と互換性が確保されます。
    • タイムトラベル: 特定の時点またはスナップショット ID のクエリを再現して、過去データの監査、ML モデルの検証、誤操作のロールバックなどに使用できます。
    • テーブルのロールバック: テーブルを正常な状態にロールバックして、問題をすばやく修正できます。
    • 充実した SQL (クエリ、DDL、DML) コマンド: SQL コマンドを使って、データベースオブジェクトの作成や操作、クエリの実行、データのロードや変更、タイムトラベル操作の実行、Hive 外部テーブルから Iceberg テーブルへの変換などを実行できます。
    • インプレースでのテーブル (スキーマ、パーティション) の進化: データの書き換え、移行、アプリケーションの変更を行うことなく、Iceberg テーブルのスキーマとパーティションレイアウトをその場で進化させることができます。
    • Cloudera Shared Data Experience (SDX) の統合: セキュリティ、ガバナンス、メタデータの管理を一元化し、すべてのデータに対してデータリネージと監査を実行できます。
    • Iceberg のレプリケーション: ディザスタリカバリとテーブルバックアップの機能をすぐに使用できます。
    • ワークロードの移植が容易: コードのリファクタリングを行うことなく、パブリッククラウドとプライベートクラウドの間でワークロードを移すことができます。

    ソリューションの概要

    データ共有とは、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 に関する以下の前提条件を満たしておく必要があります。

    • AWS アカウントと IAM ロール (Athena ノートブックを作成するためのアクセス権)

    この例では、Cloudera を使用して Iceberg テーブル上で作成および更新されているデータに Amazon Athena からアクセスする方法を説明します。

    Cloudera Public Cloud のインストールと設定については、ユーザードキュメントを参照してください。

    以下の手順に従って Cloudera を設定します。

    1. データベースとテーブルを作成する

    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');

    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')

    ;

    3. Carriers Iceberg テーブルに対してクエリを実行する

    Hue で以下のクエリを実行します。このテーブルには2つの carrier レコードが表示されます。

    SELECT * FROM airlines_data.carriers;

    4. REST カタログを設定する

    5. Ranger ポリシーを設定して、共有する「rest-demo」へのアクセスを許可する

    「rest-demo」ロールに対して、Carriers テーブルへの読み取りアクセスを許可し、かつ Airports テーブルへの読み取りアクセスを許可しないポリシーを作成します。

    Ranger で [Settings] > [Roles] に移動し、対象のロールが利用可能でグループに割り当て済みであることを確認します。

    ロールの設定

    この例では、「UnitedAirlinesRole」という名前のロールを使用して、データを共有できるようにします。

    ユーザー/グループ/ロール

    [Ranger] > [Hadoop SQL] に移動して、ポリシーを追加します。

    サービスマネージャー

    以下のような設定で新しいポリシーを作成し、保存します。

    • [Policy Name]: rest-demo-access-policy
    • [Hive Database]: airlines_data
    • [Hive Table]: carriers
    • [Hive Column]: *
    • [In Allow Conditions]
      • [Select Roles] でロールを選択
      • [Permissions]: select
    ポリシーを編集

    以下の手順に従って、Cloudera Iceberg REST カタログを使用するように設定された Amazon Athena ノートブックを作成します。

    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] ボタンをクリックすると、新しいノートブックが作成されます。

    7. Spark SQL ノートブック - REST カタログ経由でコマンドを実行する

    以下のコマンドを 1 つずつ実行して、Cloudera REST カタログで何を利用できるのかを確認します。以下のことが可能です。

    • 利用可能なデータベースの一覧を表示する

    spark.sql(show databases).show();

    • airlines_data データベースに切り替える

    spark.sql(use airlines_data);

    • 利用可能なテーブルを表示する (ただし、返されたリストに Airports テーブルが表示されないようにする)

    spark.sql(show tables).show();

    • Carriers テーブルに対してクエリを実行し、現時点でこのテーブルにある2つの Carriers を確認する

    spark.sql(SELECT * FROM airlines_data.carriers).show()

    以下の手順に従って、Cloudera Iceberg テーブルに変更を加え、Amazon Athena でそのテーブルに対してクエリを実行します。

    8. Cloudera - 新しいレコードを Carriers テーブルに挿入する

    Hue で以下のクエリを実行し、Carriers テーブルに行を1つ追加します。

    INSERT INTO airlines_data.carriers
        VALUES("DL", "Delta Air Lines Inc.");

    9. Cloudera - Carriers Iceberg テーブルに対してクエリを実行する

    Hue で以下のクエリを実行し、Carriers テーブルに行を1つ追加します。

    SELECT * FROM airlines_data.carriers;

    10. Amazon Athena ノートブック - Airlines (Carriers) テーブルのサブセットに対してクエリを実行して、変更箇所を確認する

    以下のクエリを実行すると、3つの行が返されるはずです。これは、REST カタログでメタデータポインターの変更が自動的に処理され、最新のデータを確実に取得できるようになることを示します。

    spark.sql(SELECT * FROM airlines_data.carriers).show()

    11. Amazon Athena ノートブック - Airports テーブルに対してクエリを実行し、セキュリティポリシーの設定をテストする

    以下のクエリを実行します。このクエリは想定どおり失敗し、Airports テーブルからデータが返されることはありません。これは、Ranger ポリシーが適用され、このテーブルへのアクセスが拒否されているためです。

    spark.sql(SELECT * FROM airlines_data.airports).show()

    まとめ

    この記事では、Cloudera と Amazon Athena の間でのデータ共有を設定する方法について説明しました。具体的には、Amazon Athena を使用して Iceberg REST カタログ経由で接続し、Cloudera で作成および管理されているデータに対してクエリを実行しました。

    Cloudera のオープンデータレイクハウスの主な特徴は以下のとおりです。

    • さまざまな Cloudera 製品やその他の Iceberg REST 互換ツールとのマルチエンジン互換性。
    • データの復旧と過去データの分析のためのタイムトラベルとテーブルロールバック。
    • 包括的な SQL サポートとインプレースでのスキーマの進化。
    • Cloudera SDX との統合によるセキュリティとガバナンスの一元化。
    • Iceberg のレプリケーションによるディザスタリカバリ。

    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 の開始方法」を参照してください

    Your form submission has failed.

    This may have been caused by one of the following:

    • Your request timed out
    • A plugin/browser extension blocked the submission. If you have an ad blocking plugin please disable it and close this message to reload the page.