paint-brush
データレイクの謎が明らかに: Nessie、Dremio、MinIO が波紋を起こす@minio
8,079 測定値
8,079 測定値

データレイクの謎が明らかに: Nessie、Dremio、MinIO が波紋を起こす

MinIO6m2024/02/22
Read on Terminal Reader

長すぎる; 読むには

この記事では、Nessie、Dremio、MinIO がどのように連携してデータ エンジニアリング ワークフローのデータ品質とコラボレーションを強化するかを示すステップバイステップのガイドを提供します。
featured image - データレイクの謎が明らかに: Nessie、Dremio、MinIO が波紋を起こす
MinIO HackerNoon profile picture


私たちの多くは、後に進化する要件に基づいてデータを変更しています。気づいた時にはもう巻き戻すことは不可能になってしまいます。変化は単なる定常的なものではありません。これは、洗練されたアプローチを必要とするデータ管理の重要な部分です。 Dremio のデータ カタログ Nessie の Git に似た機能を入力します。


Git がソフトウェア開発の基礎となっているのと同じように、データ エンジニアも並行して作業し、データ バージョンを比較し、運用環境への変更を促進し、必要に応じてデータをロールバックするための同様のツールを必要としています。 Nessie は、データ エンジニアに、データのバージョン、ブランチ、マージ、コミットを管理するための Git のようなバージョン管理システムを提供します。これは、複数のデータ エンジニアが同時にデータを操作および変換する場合に非常に役立ちます。 Nessie を使用すると、各エンジニアがメイン ブランチの形式で単一の真実の情報源を維持しながら、別々のブランチで作業できるようになります。この機能により、データ エンジニアリング チームは、絶え間ない変化に直面しても協力してデータ品質を維持できるようになります。


この記事では、Nessie、Dremio、MinIO がどのように連携してデータ エンジニアリング ワークフローのデータ品質とコラボレーションを強化するかを示すステップバイステップのガイドを提供します。データ エンジニア、ML エンジニア、または単なる最新のデータ レイク愛好家であっても、このブログでは、データのバージョン管理の実践を効果的に強化するために必要な知識とツールを提供します。

基本を理解する: ネッシーのワークロード

Nessie を使用すると、テスト、開発、本番環境へのプッシュを可能にする Git のようなワークロードが可能になります。いくつかの重要な概念を詳しく見てみましょう。


  • ブランチ: Git と同様に、Nessie のブランチを使用すると、さまざまなデータ エンジニアリング タスクを同時に実行できます。たとえば、機能開発、データ クリーニング、データ変換のためのブランチがあるとします。各ブランチには独自のデータ変更セットを含めることができます。


  • コミット: Nessie では、コミットは特定の時点でのデータのスナップショットを表します。データに変更を加えると、その変更を記録する新しいコミットが作成されます。コミットは特定のブランチにリンクされます。データを安定した状態または正常な状態に戻す必要がある場合、Nessie を使用すると、特定のコミットを選択してそのデータ バージョンにロールバックすることが簡単にできます。これにより、データの品質と一貫性が保証されます。


  • マージ: Nessie を使用すると、あるブランチから別のブランチに変更をマージできます。これは、Git でのコード変更のマージに似ています。ブランチをマージすると、そのブランチで行われたデータ変更はターゲット ブランチの一部になります。

コンポーネント



Dremioは、オープンソース プラットフォームとして動作する分散分析エンジンで、データ探索、変換、共同作業のための直感的なセルフサービス インターフェイスを提供します。そのデザインの基礎となっているのは、 アパッチアロー、高速カラム型メモリ形式。


Dremio を Kubernetes でデプロイする方法と、 Dremio を使用して MinIO 上の Iceberg テーブルをクエリする。 Dremio の詳細については、次のサイトを参照してください。ドレミオのリソース


MinIOは高性能オブジェクト ストレージです。格別なことで有名スピードそしてスケーラビリティ, MinIO は、最新のデータ レイク インフラストラクチャの構築と維持において極めて重要なコンポーネントとして機能します。 MinIO は、アーキテクトがオンプレミス、ベアメタル、エッジ、またはパブリック クラウドのいずれかで大量のデータを効率的に管理および保存できるようにします。


アパッチ・アイスバーグデータ レイク内の大量のデータを管理するのに適したオープン テーブル形式です。タイム トラベル、動的スキーマの進化、パーティションの進化などの独自の機能により、クエリ エンジンが同じデータに対して安全かつ効率的に同時に動作できるようになり、革新的な機能が実現します。見るIceberg と MinIO を使用したレイクハウス アーキテクチャの決定版ガイドIceberg の機能の詳細については、こちらをご覧ください。

はじめる

必要になります。ドッカーエンジンそしてDocker Composeこのチュートリアルのために。両方をまだ持っていない場合に両方を入手する最も簡単な方法は、Docker Desktop をインストールすることです。


チュートリアルのこの部分は Dremio のブログ投稿。このプロジェクトのリポジトリを取得できますここ


まず、ターミナルを開き、リポジトリをクローン/ダウンロードしたフォルダーに移動し、以下のコマンドを実行して Dremio を起動します。


 docker-compose up dremio


しばらく待ってからhttp://localhost:9047に移動して Dremio にアクセスします。要求されたフィールドを更新し、「次へ」をクリックします。



次に、次のコマンドを実行して MinIO を起動します。


 docker-compose up minio


以下の最後のdocker-compose upコマンドは Nessie を起動します。


 docker-compose up nessie


http://localhost:9001に移動し、ユーザー名とパスワードminioadmin:minioadminを使用して MinIO にログインします。バケットを作成するように求められます。



iceberg-datalakeという名前のファイルを作成します。



次にhttp://localhost:9047の Dremio に戻り、[Add Source] をクリックして、Nessie を選択します。



  • 名前をnessieに設定します
  • エンドポイント URL をhttp://nessie:19120/api/v2に設定します。
  • 認証をnoneに設定します



まだ「保存」をクリックしないでください。代わりに、左側のナビゲーション パネルで、[ストレージ] をクリックします。 MinIOはS3-API互換のオブジェクトストレージであり、AWS S3と同じ接続経路を利用できます。


  • アクセス キーには、 minioadminを設定します。
  • 秘密鍵には、 minioadminを設定します。
  • ルート パスを/iceberg-datalakeに設定します



次の一連の手順については、下にスクロールしてください。

  • Connection Propertiesの下にあるAdd Propertyボタンをクリックして、次のプロパティを作成および構成します。
    • fs.s3a.path.style.accesstrueに設定
    • fs.s3a.endpointからminio:9000
    • dremio.s3.compattrueに設定
    • Encrypt connectionチェックボックスをオフにします



次に、「保存」をクリックします。データ ソースにネッシー カタログが表示されるようになりました。



データソースの作成

Dremio で、左側の SQL Runner に移動します。テキスト エディターの右上領域にあるContext Nessie ソースに設定されていることを確認します。それ以外の場合、このクエリを実行するには、単にSalesDataではなく、 nessie.SalesDataのようなコンテキストを参照する必要があります。以下の SQL をコピーして貼り付けて実行します。


 CREATE TABLE SalesData (    id INT,    product_name VARCHAR,    sales_amount DECIMAL,    transaction_date DATE ) PARTITION BY (transaction_date); 



以下のクエリを実行して、作成したテーブルにデータを挿入します。


 INSERT INTO SalesData (id, product_name, sales_amount, transaction_date) VALUES    (1, 'ProductA', 1500.00, '2023-10-15'),    (2, 'ProductB', 2000.00, '2023-10-15'),    (3, 'ProductA', 1200.00, '2023-10-16'),    (4, 'ProductC', 1800.00, '2023-10-16'),    (5, 'ProductB', 2200.00, '2023-10-17'); 



MinIO に戻って、データ レイクに Iceberg テーブルが設定されていることを確認します。


ネッシーとの分岐・合体

http://localhost:9047の Dremio に戻ります。まず、 AT BRANCH構文を使用してメイン ブランチのテーブルをクエリします。


 SELECT * FROM nessie.SalesData AT BRANCH main; 



ETL (抽出、変換、ロード) ブランチを作成すると、運用環境に影響を与えることなくデータを操作および変換できるようになります。


 CREATE BRANCH etl_06092023 in nessie


ETL ブランチ内で、テーブルに新しいデータを挿入します。

 USE BRANCH etl_06092023 in nessie; INSERT INTO nessie.SalesData (id, product_name, sales_amount, transaction_date) VALUES (6, 'ProductC', 1400.00, '2023-10-18');


ETL ブランチ内で新しいデータがすぐに利用できることを確認します。

 SELECT * FROM nessie.SalesData AT BRANCH etl_06092023;


メイン ブランチ上のユーザーからの変更が分離されていることに注意してください。

 SELECT * FROM nessie.SalesData AT BRANCH main;


ETL ブランチからの変更をメイン ブランチにマージして戻します。

 MERGE BRANCH etl_06092023 INTO main in nessie;


メイン ブランチを再度選択して、変更が実際にマージされていることを確認します。

 SELECT * FROM nessie.SalesData AT BRANCH main


この分岐戦略により、データ エンジニアは複数のテーブルにわたる多数のトランザクションを独立して処理できるようになります。準備ができたら、データ エンジニアはこれらのトランザクションをメイン ブランチ内の単一の包括的なマルチテーブル トランザクションにマージできます。

結論

このブログ投稿では、データ エンジニアリングにおける Git のようなバージョン管理の力を詳しく掘り下げ、どのように機能するかを強調しました。ネッシーデータのバージョン、分岐、マージをシームレスに管理します。このステップバイステップのガイドでは、Nessie がオブジェクト ストレージ基盤として Dremio および MinIO と連携して、データ エンジニアリング ワークフローにおけるデータ品質とコラボレーションをどのように強化するかを示します。


あなたのデータレイクハウスがどのようなものかを教えてくださいこんにちは@minio.ioまたは私たちのSlackチャンネル


ここにも登場します。