Trinoの基本概念
この記事はTrinoのドキュメントを翻訳・意訳したものです。
また独自の説明を加えた部分もあります。
Trinoの基本概念 - Trino 451 ドキュメント
Trinoのユースケース
Trinoが提供しないもの
Trinoは多くのコミュニティメンバーによってデータベースと呼ばれていますが、一般的なリレーショナルデータベースの機能を提供するものではありません。MySQL、PostgreSQL、Oracleなどの代替品ではなく、オンライン・トランザクション処理(OLTP)を処理するために設計されていません。
Trinoが提供するもの
Trinoは大規模なデータを効率的にクエリするためのツールです。テラバイトやペタバイトのデータを扱う場合、HadoopやHDFSと連携するツールを使用している可能性があります。TrinoはHDFSに対してMapReduceジョブのパイプラインを使用するツール(例:HiveやPig)に代わるものとして設計されましたが、HDFSに限定されません。Trinoは伝統的なリレーショナルデータベースやCassandraなどの他のデータソースに対しても拡張可能です。Trinoはデータウェアハウジングやアナリティクス、データ分析、大量のデータの集計、レポート作成のために設計されています。これらのワークロードはオンライン・アナリティカル処理(OLAP)として分類されます。
概要
Trinoを理解するためには、まずTrinoドキュメント全体で使用される用語と概念を理解することが重要です。ステートメントやクエリについてはユーザーとして簡単に理解できるかもしれませんが、ステージやスプリットといった概念にも精通することで、Trinoを最大限に活用して効率的なクエリを実行できます。Trinoの管理者や貢献者としては、ステージがタスクにどうマップされ、タスクがデータを処理するドライバーのセットを含むかを理解する必要があります。このセクションでは、Trinoのコアとなる概念について定義を提供し、一般的なものから具体的なものまで順に説明しています。
アーキテクチャ
Trinoは複数のサーバーに分散してデータを並列処理する分散クエリエンジンです。Trinoのサーバーには「コーディネーター」と「ワーカー」の2種類があります。以下のセクションでは、これらのサーバーやTrinoのアーキテクチャの他のコンポーネントについて説明します。
クラスター
Trinoクラスターはコーディネーターと多くのワーカーで構成されます。ユーザーはSQLクエリツールを使ってコーディネーターに接続します。コーディネーターはワーカーと連携し、接続されたデータソースにアクセスします。このアクセスは「カタログ」によって設定されます。各クエリの処理はステートフルな操作であり、コーディネーターがワーカー全体に並列に負荷を分散します。
コーディネーター
Trinoコーディネーターはステートメントの解析、クエリの計画、ワーカーノードの管理を担当するサーバーです。クライアントが実行ステートメントを送信するノードでもあります。すべてのTrinoインストールには、少なくとも1つのコーディネーターと1つ以上のワーカーが必要です。コーディネーターは各ワーカーのアクティビティを追跡し、クエリの実行を調整します。
ワーカー
Trinoワーカーはタスクの実行とデータの処理を担当するサーバーです。ワーカーノードはコネクタからデータを取得し、中間データを交換します。コーディネーターはワーカーから結果を取得し、最終結果をクライアントに返します。ワーカープロセスが開始されると、ワーカーはコーディネーターのディスカバリーサーバーに自らを広告し、タスク実行に利用可能となります。
データソース
Trinoでは「コネクタ」「カタログ」「スキーマ」「テーブル」といった基本的な概念が使用され、これらは特定のデータソースのモデルを表します。
コネクタ
コネクタはHiveやリレーショナルデータベースなどのデータソースに対するTrinoのアダプターです。TrinoのSPIの実装であり、標準APIを使ってリソースとやり取りします。
カタログ
カタログはスキーマを含み、コネクタを介してデータソースを参照します。SQLステートメントを実行する際、カタログに対して実行されます。
スキーマ
スキーマはテーブルを整理する方法です。カタログとスキーマを組み合わせることで、クエリ可能なテーブルのセットが定義されます。
テーブル
テーブルは名前付きのカラムとタイプで構成される無秩序な行のセットです。ソースデータからテーブルへのマッピングはコネクタによって定義されます。
クエリ実行モデル
TrinoはSQLステートメントを解析し、クエリに変換して分散クエリ計画を作成し、クラスター全体で実行します。
ステートメント
TrinoはANSI互換のSQLステートメントを実行します。ステートメントはSQLテキストの表現であり、実行されるとクエリとクエリ計画が作成されます。
クエリ
ステートメントが解析されると、クエリに変換され、分散クエリ計画が作成されます。クエリはステージ、タスク、スプリット、コネクタなどのコンポーネントとデータソースが連携して結果を生成します。
ステージ
クエリの実行は階層的なステージに分割されます。各クエリにはルートステージがあり、それが他のステージの出力を集約します。
タスク
ステージはタスクとして実装され、ネットワーク上のTrinoワーカーに分散されます。タスクはスプリットに作用し、並列に実行されるドライバーーtのセットを含みます。
スプリット
タスクはスプリットと呼ばれるデータセットのセクションに対して動作します。コーディネーターはコネクタにクエリをスケジューリングする際、テーブルのすべてのスプリットのリストを取得します。
ドライバー
タスクは並列ドライバーを含み、データに作用し、オペレーターを組み合わせて出力を生成します。ドライバーはTrinoアーキテクチャでもっとも低レベルの並列処理単位です。
オペレーター
オペレーターはデータを消費、変換、生成します。たとえば、テーブルスキャンはコネクタからデータを取得し、フィルターオペレーターはデータを消費して入力データに対して述語を適用してサブセットを生成します。
エクスチェンジ
エクスチェンジはTrinoノード間でデータを転送します。タスクは出力バッファーにデータを生成し、他のタスクからデータを消費します。
Discussion