paint-brush
Kubernetes を使用して MinIO と Trino をデプロイする方法@minio
4,966 測定値
4,966 測定値

Kubernetes を使用して MinIO と Trino をデプロイする方法

MinIO6m2024/05/23
Read on Terminal Reader

長すぎる; 読むには

AI/ML と分析にわたる大量のワークロードを処理できる機能により、MinIO は Trino クエリなどを簡単にサポートします。
featured image - Kubernetes を使用して MinIO と Trino をデプロイする方法
MinIO HackerNoon profile picture
0-item
1-item



トリノ(旧称 Presto) は SQL クエリ エンジンであり、SQL データベースではありません。 Trino は SQL データベースのストレージ コンポーネントを避け、超高速 SQL クエリにのみ焦点を当てています。 Trino は単なるクエリ エンジンであり、データを保存しません。 代わりに、Trino はさまざまなデータベースとやり取りしたり、オブジェクト ストレージと直接やり取りしたりします。 Trino は渡された SQL クエリを解析して分析し、データ ソースを含むクエリ実行プランを作成して最適化してから、接続先の基盤となるデータベースをインテリジェントにクエリできるワーカー ノードをスケジュールします。


MinIOは、AI/MLワークロード、データレイクからレイクハウス(Dremio、Hive、Hudi、StarRocks、その他数十の優れたAI/MLツールソリューションのいずれか)にデータを格納するために頻繁に使用されます。MinIOはプライマリストレージレイヤーとして使用するとより効率的であり、格納されたデータの総所有コストを削減します。さらに、MinIOにデータを書き込むことで、不変バージョン管理そして保護されている消失訂正符号さらに、データを MinIO オブジェクト ストレージに保存すると、他のクラウド ネイティブの機械学習および分析アプリケーションでも利用できるようになります。


このチュートリアルでは、Hive Metastore のメタデータと Redis のテーブル スキーマを活用する Trino を使用して、Minio に保存されている大規模なデータセット全体で分散 SQL クエリを実行できる統合システムを展開します。

コンポーネント

次に説明するセットアップ プロセスでは、さまざまなコンポーネントと、それらのコンポーネントがどのような機能を果たすのかを説明します。


  • Minio: Minio は、Trino で通常分析されるような大規模なデータセットを保存するために使用できます。
  • Hive メタストア: Hive メタストアは、Hive テーブルのメタデータ (テーブル スキーマなど) を保存するサービスです。Trino は、データセットをクエリするときに Hive メタストアを使用してテーブルのスキーマを決定できます。
  • Hive メタストア用の PostgreSQL:これは、Hive メタストアのデータベース バックエンドです。メタデータが実際に保存される場所です。
  • Redis:このセットアップでは、Trino のテーブル スキーマを保存するために Redis を使用します。
  • Trino: Trino (旧称 Presto) は、高性能な分散 SQL クエリ エンジンです。SQL データベース、NoSQL データベース、さらには Minio のようなオブジェクト ストレージなど、さまざまなデータ ソースにわたってデータをクエリできます。

前提条件

始める前に、Kubernetes クラスターを管理するために必要なツールがインストールされていることを確認してください。


  • kubectl : Kubernetes クラスターを管理するための主要なコマンドライン ツール。これを使用して、クラスター リソースを検査、操作、管理できます。
  • helm : Kubernetes 用のパッケージ マネージャー。Helm を使用すると、事前定義されたチャートを使用して、クラスター内でアプリケーションをデプロイ、アップグレード、管理できます。

リポジトリのクローン作成

Trino を Kubernetes にデプロイするために必要なリソースにアクセスするには、特定の GitHub リポジトリをクローンし、適切なディレクトリに移動します。


 git clone https://github.com/minio/blog-assets.git cd blog-assets/trino-on-kubernetes

Kubernetes 名前空間の作成

Kubernetes の名前空間は、アプリケーションに分離された環境を提供します。Trino の新しい名前空間を作成して、そのデプロイメントをカプセル化します。


 kubectl create namespace trino --dry-run=client -o yaml | kubectl apply -f -

Redis テーブル定義の秘密

Redis は Trino が使用するテーブル スキーマを保存します。Kubernetes Secret を使用してこれらのスキーマを保護します。次のコマンドは、JSON ファイルからデータを取得する汎用シークレットを作成します。


 kubectl create secret generic redis-table-definition --from-file=redis/test.json -n trino || true


Helmリポジトリを追加する

Helm リポジトリは、アプリケーションのデプロイメントを簡素化するパッケージ済みのチャートを提供します。Bitnami および Trino リポジトリを Helm 構成に追加します。


 helm repo add bitnami https://charts.bitnami.com/bitnami || true helm repo add trino https://trinodb.github.io/charts/ || true

データストレージにMinIOを導入する

MinIOを初期化する

Trino 名前空間内に MinIO を準備します。


 kubectl minio init -n trino

MinIOテナントを作成する

データ ストレージ用のマルチテナント アーキテクチャを設定します。以下の例では、4 つのサーバー、4 つのストレージ ボリューム、4 GiB の容量を持つ「tenant-1」という名前のテナントを作成します。


 kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi -n trino

Hive メタストアの設定

Trino は Hive Metastore を使用してテーブル メタデータを保存します。メタデータを管理するために PostgreSQL をデプロイし、Hive Metastore を設定します。

PostgreSQLをインストールする


helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml

Hiveメタストアをデプロイする

事前設定された Helm チャートを使用して、Trino 名前空間内に Hive Metastore をデプロイします。


 helm upgrade --install my-hive-metastore -n trino -f hive-metastore/values.yaml ./charts/hive-metastore

Kubernetes で MinIO と Trino をデプロイする

Trino と MinIO は、大規模なデータセット全体にわたる分散 SQL クエリのための強力な組み合わせを作成します。システムを展開して構成するには、次の手順に従ってください。

テーブルスキーマを保存するために Redis をデプロイする

Redis は、クエリ パフォーマンスを向上させるために Trino テーブル スキーマを保持するために使用される高速のインメモリ データ ストアです。Helm チャートを使用して Trino 名前空間にデプロイします。


 helm upgrade --install my-redis bitnami/redis -n trino -f redis/values.yaml


Trinoを展開する

MinIO やその他のデータ ソースに接続する分散 SQL クエリ エンジンとして Trino をデプロイします。


 helm upgrade --install my-trino trino/trino --version 0.7.0 --namespace trino -f trino/values.yaml

展開の検証

Trino 名前空間内のポッドを一覧表示して、すべてのコンポーネントが正しく実行されていることを確認します。


 kubectl get pods -n trino


セキュリティレビューと調整


必要に応じてセキュリティ設定を確認して調整します。S3 接続の SSL 証明書検証を無効にするには、values.yaml ファイルの additionalCatalogs セクションを次のプロパティで更新します。


 hive.s3.ssl.enabled=false

テスト

MinIO テナント サービスへのポート転送

テナントの MinIO サービスにポート転送し、ローカル アクセスを有効にします。


 kubectl port-forward svc/minio -n trino 9443:443

Trino のエイリアスとバケットを作成する

1. エイリアスの作成: MinIO デプロイメントの資格情報を使用して、テナントのエイリアスを確立します。


 mc alias set my-minio https://localhost:9443/ minio_access_key minio_secret_key --insecure


2. バケットの作成: Trinoが使用する新しいバケットを作成します


mc mb my-minio/tiny --insecure

ポート転送経由でTrino UIにアクセスする

1. ポッド名を取得する: Trino コーディネーター ポッドの名前を取得します。


 export POD_NAME=$(kubectl get pods --namespace trino -l "app=trino,release=my-trino,component=coordinator" -o jsonpath="{.items[0].metadata.name}")


2. ポート転送:ローカル ポート 8080 をコーディネーター ポッドに転送します。


 kubectl port-forward $POD_NAME 8080:8080


3. UI にアクセスする: http://127.0.0.1:8080 にアクセスして、ブラウザで Trino UI を使用します。



CLI 経由で Trino をクエリする

Trino コーディネーター ポッドにアクセスし、コマンド ライン経由でクエリを開始します。


 kubectl exec -it deploy/my-trino-coordinator -n trino -- trino


 SHOW CATALOGS;


 SHOW SCHEMAS IN minio;


 Schema -------------------- default information_schema


 CREATE SCHEMA minio.tiny WITH (location = 's3a://tiny/');


 CREATE TABLE minio.tiny.customer WITH ( format = 'ORC', external_location = 's3a://tiny/customer/' ) AS SELECT * FROM tpch.tiny.customer;


 SELECT * FROM minio.tiny.customer LIMIT 50;


 SHOW SCHEMAS IN minio;


 Schema -------------------- default information_schema tiny (3 rows)


MinIOバケット内のデータの確認

バケットを作成したら、mc コマンドライン ツールを使用して内容を一覧表示し、データが MinIO に保存されていることを確認します。次のコマンドを使用します。


 mc ls my-minio/tiny --insecure


とても簡単ですよ!

最終的な考え

構成の問題、特にセキュリティに関する問題をトラブルシューティングする場合は、各コンポーネントの values.yaml ファイルを徹底的に確認して、適切な設定になっていることを確認してください。


Trino は、特殊なデータベースやオブジェクト ストレージなど、さまざまなデータ レイヤーにわたってクエリを最適化する機能で際立っています。クエリをプッシュダウンして必要なデータのみを取得することで、データ転送を最小限に抑えることを目指しています。これにより、Trino はさまざまなソースのデータセットを結合したり、さらに処理を実行したり、正確な結果を効率的に返したりすることができます。


MinIO は、業界をリードするスケーラビリティとパフォーマンスにより、Trino と非常に相性が良いです。AI/ML と分析全体で大量のワークロードを処理できる MinIO は、Trino クエリなどを簡単にサポートします。最近のベンチマークでは、MinIO はわずか 32 ノードで GET 操作で 325 GiB/秒 (349 GB/秒)、PUT 操作で 165 GiB/秒 (177 GB/秒) という驚異的なパフォーマンスを達成しました。この優れたパフォーマンスにより、MinIO に保存されたデータにいつでもアクセスできる状態が確保され、ボトルネックになることなく、Trino にとって信頼性が高く高性能な選択肢となる MinIO が実現します。


MinIOとTrinoについてご質問がある場合は、お気軽にお問い合わせください。スラック