paint-brush
Iceberg、Tabular、MinIO を使用した効果的な最新データ アーキテクチャの構築@minio
7,918 測定値
7,918 測定値

Iceberg、Tabular、MinIO を使用した効果的な最新データ アーキテクチャの構築

MinIO7m2024/04/17
Read on Terminal Reader
Read this story w/o Javascript

長すぎる; 読むには

最新のデータレイクは、あらゆるデータ ニーズに対応する中央ハブを提供します。ただし、効果的なデータレイクの構築と管理は複雑になる場合があります。
featured image - Iceberg、Tabular、MinIO を使用した効果的な最新データ アーキテクチャの構築
MinIO HackerNoon profile picture
0-item
1-item


現代のデータ環境では、構造化データと非構造化データをシームレスに統合し、簡単に拡張でき、効率的なAI/MLワークロードを実現する新しいタイプのインフラストラクチャが必要です。最新のデータレイクあらゆるデータ ニーズに対応する中央ハブを提供します。ただし、効果的なデータ レイクの構築と管理は複雑になる場合があります。


このブログ記事では、現在のアプローチを最適化できる 3 つの強力なツールについて詳しく説明します。アパッチ アイスバーグ表形式、および MinIO。以下の手順では、これらのサービスをシームレスに組み合わせて、AI/ML ワークロード向けに特別に最適化された堅牢なクラウドネイティブ データ レイク アーキテクチャを作成する方法について説明します。

Tabular とは何ですか?

Tabular は、Apache Iceberg のオリジナル作成者によって作成されたデータ プラットフォームです。任意のコンピューティング レイヤーに接続できる独立したユニバーサル ストレージ プラットフォームを提供するように設計されており、データ ベンダーのロックインを排除します。この機能は最新のデータ スタックにとって重要であり、ユーザーは特定のベンダーの古いツール セットや不一致なツール セットに縛られることなく、クラス最高のコンピューティング ツールとストレージ ツールを選択できます。


建築MinIO と Iceberg の統合であり、Tabular によって拡張できます。Tabular を使用すると、MinIO に保存されている Iceberg データの管理とクエリを実行でき、スケーラブルで高性能なクラウド ネイティブな方法で構造化データを保存および管理できます。これらの Kubernetes ネイティブ コンポーネントは、ほとんど摩擦なくスムーズに連携し、互いの機能を活用して大規模に実行します。

Hadoop のファイル IO ではなく S3FileIO を使用する理由は何ですか?

この実装はIcebergのS3FileIOを活用しています。S3FileIOはいくつかの理由からHadoopのファイルIOよりも優れていると考えられています。そのいくつかについてはすでに説明しました。他の場所:


  1. クラウド ストレージ向けに最適化: Iceberg の S3FileIO は、クラウド ネイティブ ストレージで動作するように設計されています。


  2. スループットの向上とスロットリングの最小化: IcebergはオブジェクトストアロケーションプロバイダーMinIO バケット内の複数のプレフィックスにファイルを分散することで、S3 関連の IO 操作のスロットルを最小限に抑え、スループットを最大化できます。


  3. 厳格な一貫性:アイスバーグは更新しましたパフォーマンスに影響を与える可能性のある冗長な一貫性チェックを排除することで、厳密な一貫性を最大限に活用します。


  4. プログレッシブマルチパートアップロード: IcebergのS3FileIOは、プログレッシブマルチパートアップロードこのアルゴリズムは、データ ファイルの各部分が準備でき次第、各部分を並行してアップロードするため、ローカル ディスクの使用量が減少し、アップロード速度が向上します。


  5. チェックサム検証: Icebergではチェックサム検証S3 API 書き込みでは、アップロードされたオブジェクトの整合性が確保されます。これは、適切なカタログ プロパティを設定することで有効にできます。


  6. カスタムタグ: Icebergは追加をサポートしますカスタムタグS3 API を使用した書き込みおよび削除操作中にオブジェクトにアクセスできるため、コストの追跡と管理に役立ちます。


  7. ネガティブキャッシュの回避: IcebergのFileIOインターフェースは、Hadoop互換のファイルシステムほど厳格な保証を必要としないため、ネガティブキャッシュを避けるそうしないとパフォーマンスが低下する可能性があります。


対照的に、S3FileIO より前に使用されていた Hadoop の S3A FileSystem は、クラウド ストレージに対して同じレベルの最適化を提供しません。つまり、過去の罠で将来を見据えたデータ レイク インフラストラクチャを妨げないでください。

前提条件

始める前に、システムが次の要件を満たしていることを確認してください。

最初から始める場合は、 Dockerデスクトップ特定のプラットフォーム用のインストーラーをダウンロードしてください。多くの場合、Docker と Docker Compose を個別にダウンロードするよりも簡単です。次のコマンドを実行して、Docker がインストールされているかどうかを確認します。


 docker-compose --version


はじめる

まず、TabularのYAMLファイルを複製またはコピーします。 Gitリポジトリこのチュートリアルでは YAML だけが必要です。リポジトリの残りの部分は後で自由に調べてください。


詳しく見る

提供されている YAML ファイルは、Docker Compose 構成ファイルです。これは、マルチコンテナ Docker アプリケーションの一連のサービスとその構成を定義します。この場合、Spark-Iceberg と MinIO の 2 つのサービスがあります。各セクションを詳しく見ていきましょう。


1. Spark-Icebergサービス:


 spark-iceberg: image: tabulario/spark-iceberg container_name: spark-iceberg build: spark/ networks: iceberg_net: depends_on: - rest - minio volumes: - ./warehouse:/home/iceberg/warehouse - ./notebooks:/home/iceberg/notebooks/notebooks environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 ports: - 8888:8888 - 8080:8080 - 10000:10000 - 10001:10001 rest: image: tabulario/iceberg-rest container_name: iceberg-rest networks: iceberg_net: ports: - 8181:8181 environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 - CATALOG_WAREHOUSE=s3://warehouse/ - CATALOG_IO__IMPL=org.apache.iceberg.aws.s3.S3FileIO - CATALOG_S3_ENDPOINT=http://minio:9000



image: spark-iceberg サービスに使用する Docker イメージを指定します。この場合、tabulario/spark-iceberg:latest イメージが使用されます。

depends_on: spark-iceberg サービスが rest サービスと minio サービスに依存することを指定します。

container_name:コンテナに特定の名前 (spark-iceberg) を割り当てます。

environment: Spark や AWS 認証情報など、コンテナの環境変数を設定します。

ボリューム:ローカル ディレクトリ (./warehouse および ./notebooks) をコンテナー内のボリュームとしてマウントします。

ポート: Spark UI やその他のサービスにアクセスするために、コンテナー ポートをホスト ポートにマップします。


2. Minioサービス:


 minio: image: minio/minio container_name: minio environment: - MINIO_ROOT_USER=admin - MINIO_ROOT_PASSWORD=password - MINIO_DOMAIN=minio networks: iceberg_net: aliases: - warehouse.minio ports: - 9001:9001 - 9000:9000 command: ["server", "/data", "--console-address", ":9001"]


image: MinIO サービスの Docker イメージを指定します。

container_name:コンテナに特定の名前 (MinIO) を割り当てます。

environment:ルート ユーザーの資格情報を含む MinIO を構成するための環境変数を設定します。

ポート: MinIO UI にアクセスするためにコンテナ ポートをホスト ポートにマッピングします。

command:特定のパラメータを使用して MinIO サーバーを起動するコマンドを指定します。


MinIOサービスのもう一つの側面はMC MinIO のコマンドライン ツール。


 mc: depends_on: - minio image: minio/mc container_name: mc networks: iceberg_net: environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 entrypoint: > /bin/sh -c " until (/usr/bin/mc config host add minio http://minio:9000 admin password) do echo '...waiting...' && sleep 1; done; /usr/bin/mc rm -r --force minio/warehouse; /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null "


depends_on: mc サービスが MinIO サービスに依存することを指定します。

image: mc サービスの Docker イメージを指定します。

container_name:コンテナに特定の名前 (mc) を割り当てます。

environment: MinIO クライアントを構成するための環境変数を設定します。

entrypoint: MinIO クライアントのセットアップ手順を含む、コンテナーのエントリ ポイント コマンドを定義します。


 /usr/bin/mc rm -r --force minio/warehouse; /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null "



このコマンドのシーケンスは基本的に次のタスクを実行します。


  • 既存のウェアハウス ディレクトリとその内容を MinIO サーバーから削除します。

  • warehouse という名前の新しいバケットを作成します。

  • ウェアハウス バケットのアクセス ポリシーをパブリックに設定します。


この Docker Compose ファイルは、Spark、PostgreSQL、MinIO のサービスを使用してマルチコンテナ環境をオーケストレーションします。依存関係、環境変数、およびサービスを一緒に実行するために必要なコマンドを設定します。サービスは連携して動作し、Spark と Iceberg を使用し、MinIO をオブジェクト ストレージ バックエンドとしてデータ処理の開発環境を作成します。

起動

ターミナル ウィンドウで、リポジトリの tabular-spark-setup ディレクトリに cd し、次のコマンドを実行します。


 docker-compose up


資格情報admin:password使用してhttp://127.0.0.1:9001で MinIO にログインし、ウェアハウス バケットが作成されたことを確認します。



すべてのコンテナが起動したら、 http://localhost:8888に移動して Jupyter Notebook サーバーにアクセスできます。



サンプル ノートブックの 1 つを実行し、 http://127.0.0.1:9001の MinIO に戻って、ウェアハウスにデータが取り込まれていることを確認します。


最新のデータレイクの構築

Iceberg、Tabular、MinIO を使用した最新のデータレイクの構築に関するこのチュートリアルは、ほんの始まりに過ぎません。この強力な 3 部構成は、可能性の世界への扉を開きます。これらのツールを使用すると、構造化データと非構造化データをすべてシームレスに統合して分析し、隠れたパターンを発見して、イノベーションを促進するデータ主導の意思決定を行うことができます。このアーキテクチャの効率性と柔軟性を本番環境で活用して、AI/ML イニシアチブを促進し、機械学習モデルの真の可能性を解き放ち、画期的な発見への道を加速します。お問い合わせください。こんにちはまたは当社のスラック構築中に質問がある場合は、チャンネルにお問い合わせください。