Trinoは、1つ以上の異種データソースに分散された大規模データセットを照会するために設計されたオープンソース分散型SQLクエリエンジンです。Trinoは、大量のデータを処理し、レポートを生成することで、データウェアハウス、ETL、インタラクティブな分析を行うために設計されています。
Alluxioは、大規模な分析とAIのためのオープンソースデータオーケストレーションプラットフォームです。Alluxioは、TrinoやApache Sparkなどの計算フレームワークとAmazon S3、Google Cloud Storage、HDFS、MinIOなどの様々なストレージシステムの間に位置しています。
これは、Icebergコネクタを使用してTrinoのキャッシングレイヤーとしてAlluxioを展開するためのチュートリアルです。
Trinoのキャッシングが必要な理由は何ですか?
A small fraction of the petabytes of data you store is generating business value at any given time. Repeatedly scanning the same data and transferring it over the network consumes time, compute cycles, and resources. This issue is compounded when pulling data from disparate Trino clusters across regions or clouds. In these circumstances, caching solutions can significantly reduce the latency and cost of your queries.
Trinoは、Hiveコネクタに組み込まれたキャッシングエンジンであるRubixを備えています。このシステムはTrinoに付属しているため便利ですが、Hiveコネクタに限定されており、2020年以来維持されていません。また、セキュリティ機能や追加の計算エンジンのサポートが不足しています。
Alluxio上のTrino
AlluxioはTrinoを様々なストレージシステムに接続し、データ駆動型アプリケーションのためのAPIと統一された名前空間を提供します。Alluxioを使用すると、Trinoはデータソースに関係なくデータにアクセスでき、頻繁にアクセスされるデータ(例えば、一般的に使用されるテーブル)をAlluxio分散ストレージに透過的にキャッシュできます。
MinIOファイルストレージ上のIcebergコネクタを介したAlluxioキャッシングの使用
MinIOでのwrite-throughキャッシングを使用するAlluxioを構成する方法を示すデモを作成しました。これは、Icebergコネクタを使用し、Trinoの観点からテーブルの場所プロパティを1つの変更することで実現されます。
このデモでは、Alluxioは別のサーバー上で実行されていますが、Trinoと同じノード上で実行することが推奨されます。これは、Alluxioのすべての設定がAlluxioが実行されているサーバーに配置される一方、Trinoの設定は影響を受けないことを意味します。Alluxioを外部で実行する利点は、Trinoとリソースを争わないことですが、欠点はAlluxioから読み取る際にデータをネットワーク経由で転送する必要があることです。TrinoとAlluxioが同じネットワーク上にあることはパフォーマンスにとって重要です。
このデモを進めるために、こちらにあるコードをコピーしてください。
Trinoの設定
Trinoは標準のIceberg設定と同様に設定されています。AlluxioがTrinoの外部で実行されているため、必要な設定は起動時ではなくクエリ時です。
Alluxioの設定
Alluxioの設定はすべてalluxio-site.properties
ファイルを使用して設定できます。すべての設定をdocker-compose.yml
に配置して保持するため、Javaプロパティを使用してALLUXIO_JAVA_OPTS
環境変数を介して設定しています。このチュートリアルでは、マスターノードをリーダー、ワーカーをフォロワーと呼んでいます。
リーダーの設定
alluxio.master.mount.table.root.ufs=s3://alluxio/
リーダーはポート19998
と19999
を公開し、後者はWeb UIのポートです。
フォロワーの設定
alluxio.worker.ramdisk.size=1G
alluxio.worker.hostname=alluxio-follower
フォロワーはポート29999
と30000
を公開し、Alluxioがデータを格納するために使用する共有メモリを設定します。これはshm_size
プロパティを介して1G
に設定され、alluxio.worker.ramdisk.size
プロパティから参照されます。
リーダーとフォロワー間の共有設定
alluxio.master.hostname=alluxio-leader
# Minioの設定
alluxio.underfs.s3.endpoint=http://minio:9000
alluxio.underfs.s3.disable.dns.buckets=true
alluxio.underfs.s3.inherit.acl=false
aws.accessKeyId=minio
aws.secretKey=minio123
# デモ専用の設定
alluxio.security.authorization.permission.enabled=false
alluxio.master.hostname
は、すべてのノード、リーダーおよびフォロワーに設定する必要があります。ほとんどの共有設定は、このケースではMinIOであるunderfs
をAlluxioに向けます。
alluxio.security.authorization.permission.enabled
は、Dockerの設定を簡単に保つために“false”に設定されています。
注意: これは、本番環境やCI/CD環境で行うことを推奨しません。
サービスの実行
まず、サービスを起動します。trino-getting-started/iceberg/trino-alluxio-iceberg-minio
ディレクトリにいることを確認してください。次のコマンドを実行してください:
docker-compose up -d
以下の出力を期待できます。Dockerはまた、「Created/Started」メッセージが表示される前にDockerイメージをダウンロードする必要がある場合がありますので、余分な出力がある場合があります。
[+] Running 10/10
⠿ Network trino-alluxio-iceberg-minio_trino-network Created 0.0s
⠿ Volume "trino-alluxio-iceberg-minio_minio-data" Created 0.0s
⠿ Container trino-alluxio-iceberg-minio-mariadb-1 Started 0.6s
⠿ Container trino-alluxio-iceberg-minio-trino-coordinator-1 Started 0.7s
⠿ Container trino-alluxio-iceberg-minio-alluxio-leader-1 Started 0.9s
⠿ Container minio Started 0.8s
⠿ Container trino-alluxio-iceberg-minio-alluxio-follower-1 Started 1.5s
⠿ Container mc Started 1.4s
⠿ Container trino-alluxio-iceberg-minio-hive-metastore-1 Started
Trino CLIを開く
これが完了したら、Trinoコーディネーターノードにログインできます。これを行うには、exec
コマンドを使用し、コンテナ上で実行するコマンドとしてtrino
CLI実行可能ファイルを実行します。コンテナIDがtrino-alluxio-iceberg-minio-trino-coordinator-1
であることに注意してください。そのため、実行するコマンドは次のようになります:
<<<<<<< HEAD
docker container exec -it trino-alluxio-iceberg-minio-trino-coordinator-1 trino
=======
docker container exec -it trino-minio_trino-coordinator_1 trino
>>>>>>> alluxio
このステップを開始すると、起動が完了するとtrino
カーソルが表示されるはずです。完了したときの外観は次のようになります:
trino>
この設定がどのように機能するか最もよく理解するために、TPCコネクタからデータをプッシュするCTAS(CREATE TABLE AS)クエリを使用してIcebergテーブルを作成してみましょう。これはMinIOを指すIcebergにポイントします。TPCコネクタはデータをリアルタイムで生成するため、このような簡単なテストを実行できます。
まず、カタログを表示するコマンドを実行して、CTASクエリで使用するtpch
およびiceberg
カタログを確認します:
SHOW CATALOGS;
Icebergカタログが登録されていることがわかるはずです。
MinIOバケットとTrinoスキーマ
起動時に、mc
CLI for MinIOを含む初期化コンテナで次のコマンドが実行されます。これにより、/alluxio
という名前のMinIO内のバケットが作成され、データの書き込み先とTrinoがそれを見つける場所が得られます:
/bin/sh -c "
until (/usr/bin/mc config host add minio http://minio:9000 minio minio123) do echo '...waiting...' && sleep 1; done;
/usr/bin/mc rm -r --force minio/alluxio;
/usr/bin/mc mb minio/alluxio;
/usr/bin/mc policy set public minio/alluxio;
exit 0;
"
注意:このバケットはAlluxioのマウントポイントとして機能するため、Alluxio内のスキーマディレクトリalluxio://lakehouse/
はs3://alluxio/lakehouse/
にマッピングされます。
Trinoのクエリ
では、MinIOのバケットを指すSCHEMA
を作成し、CTASクエリを実行していきましょう。ターミナルに戻り、iceberg.lakehouse
SCHEMA
を作成してください。これにより、Alluxio名前空間内のスキーマの場所を保存するために、メタストアへの最初の呼び出しが行われます。Alluxioをデフォルトのファイルシステムとして設定していないため、ホスト名alluxio-leader
とポート19998
を指定する必要があることに注意してください。DDLステートメントを管理するユーザーに対してAlluxioキャッシングをデフォルトの使用方法として透明に使用したい場合は、この点を考慮してください。
CREATE SCHEMA iceberg.lakehouse
WITH (location = 'alluxio://alluxio-leader:19998/lakehouse/');
Alluxioによって同期されるMinIOのバケットを参照するSCHEMA
があるので、最初のテーブルを作成できます。
オプション: クエリの実行を確認するには、Trino UIにログインし、セキュリティが設定されていないため、ユーザー名は任意で構いません。
生成された小さなTPCHデータからMinIOに顧客データをCTASクエリで移動します。以下のクエリを実行し、Trino UIで実行状況を見たい場合はそれも可能です。
CREATE TABLE iceberg.lakehouse.customer
WITH (
format = 'ORC',
location = 'alluxio://alluxio-leader:19998/lakehouse/customer/'
)
AS SELECT * FROM tpch.tiny.customer;
次に、Alluxio UIとMinIO UIに移動し、AlluxioおよびMinIOのファイルを参照してください。これで、TrinoがAlluxioに書き込み、AlluxioがMinIOに書き込むデータを含むlakehouse
ディレクトリが含まれるcustomer
ディレクトリが表示されます。
現在、AlluxioとMinIOの下にテーブルがあります。以下の方法でこのデータを照会できます:
SELECT * FROM iceberg.lakehouse.customer LIMIT 10;
Trinoが実際にAlluxioから読み取っていて、MinIOではないことをどうやって確認するのでしょうか? MinIOのデータを削除してから、再度クエリを実行して確認してみましょう。このデータを削除した後、データが返されるはずです。
サービスの停止
このチュートリアルを完了したら、この演習で使用したリソースを次のコマンドで解放できます:
docker-compose down
結論
この時点で、TrinoとAlluxioの理解が深まり、TrinoとAlluxioのデプロイ方法、およびIcebergコネクタとMinIOファイルストレージでAlluxioキャッシングを使用する方法について学びました。この記事を楽しんでいただけたことを願っています。この記事にいいねをして、質問があればコメントを残してください!
Source:
https://dzone.com/articles/get-started-with-trino-and-alluxio-in-five-minutes