MinIOは、AI/MLワークロード、データレイクからレイクハウス(Dremio、Hive、Hudi、StarRocks、その他数十の優れたAI/MLツールソリューションのいずれか)にデータを格納するために頻繁に使用されます。MinIOはプライマリストレージレイヤーとして使用するとより効率的であり、格納されたデータの総所有コストを削減します。さらに、MinIOにデータを書き込むことで、
このチュートリアルでは、Hive Metastore のメタデータと Redis のテーブル スキーマを活用する Trino を使用して、Minio に保存されている大規模なデータセット全体で分散 SQL クエリを実行できる統合システムを展開します。
次に説明するセットアップ プロセスでは、さまざまなコンポーネントと、それらのコンポーネントがどのような機能を果たすのかを説明します。
始める前に、Kubernetes クラスターを管理するために必要なツールがインストールされていることを確認してください。
Trino を Kubernetes にデプロイするために必要なリソースにアクセスするには、特定の GitHub リポジトリをクローンし、適切なディレクトリに移動します。
git clone https://github.com/minio/blog-assets.git cd blog-assets/trino-on-kubernetes
Kubernetes の名前空間は、アプリケーションに分離された環境を提供します。Trino の新しい名前空間を作成して、そのデプロイメントをカプセル化します。
kubectl create namespace trino --dry-run=client -o yaml | kubectl apply -f -
Redis は Trino が使用するテーブル スキーマを保存します。Kubernetes Secret を使用してこれらのスキーマを保護します。次のコマンドは、JSON ファイルからデータを取得する汎用シークレットを作成します。
kubectl create secret generic redis-table-definition --from-file=redis/test.json -n trino || true
Helm リポジトリは、アプリケーションのデプロイメントを簡素化するパッケージ済みのチャートを提供します。Bitnami および Trino リポジトリを Helm 構成に追加します。
helm repo add bitnami https://charts.bitnami.com/bitnami || true helm repo add trino https://trinodb.github.io/charts/ || true
Trino 名前空間内に MinIO を準備します。
kubectl minio init -n trino
データ ストレージ用のマルチテナント アーキテクチャを設定します。以下の例では、4 つのサーバー、4 つのストレージ ボリューム、4 GiB の容量を持つ「tenant-1」という名前のテナントを作成します。
kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi -n trino
Trino は Hive Metastore を使用してテーブル メタデータを保存します。メタデータを管理するために PostgreSQL をデプロイし、Hive Metastore を設定します。
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
事前設定された Helm チャートを使用して、Trino 名前空間内に Hive Metastore をデプロイします。
helm upgrade --install my-hive-metastore -n trino -f hive-metastore/values.yaml ./charts/hive-metastore
Trino と MinIO は、大規模なデータセット全体にわたる分散 SQL クエリのための強力な組み合わせを作成します。システムを展開して構成するには、次の手順に従ってください。
Redis は、クエリ パフォーマンスを向上させるために Trino テーブル スキーマを保持するために使用される高速のインメモリ データ ストアです。Helm チャートを使用して Trino 名前空間にデプロイします。
helm upgrade --install my-redis bitnami/redis -n trino -f redis/values.yaml
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 サービスにポート転送し、ローカル アクセスを有効にします。
kubectl port-forward svc/minio -n trino 9443:443
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
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 を使用します。
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)
バケットを作成したら、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についてご質問がある場合は、お気軽にお問い合わせください。