Presto(Trino) を使用する

Prev Next

VPC環境で利用できます。

Presto(Trino)は、テラバイト、ペタバイト単位のデータを分散クエリ(Distributed queries)を使用して分析できるツールです。
HDFSだけでなく Hive Warehouseや RDBMSなどの様々なソースからデータを読み取ります。

クエリが MapReduce Jobとして実行される HivePigとは異なり、Presto(Trino)にはクエリの実行エンジンが別途実装されています。ステップ別の結果をディスクに書き込まずにメモリからメモリへデータを転送する仕組みになっており、HDFSに保存されたデータを Hiveより迅速かつインタラクティブに分析できます。そのため、Tableauといった BI Toolでは Hiveより Presto(Trino)の方が連携に適しています。

参考
  • Cloud Hadoop 1.9までは Prestoを、Cloud Hadoop 2.0では Trinoという名前を使用します。
  • Presto(Trino)もまた、Hiveや Pigのように OLAPタスクを処理するために設計されたため、トランザクション(Transaction)中心の従来の RDBMSを代替することはできません。

Presto(Trino)の構成要素

Presto(Trino)サービスを構成する2つの主要コンポーネントは、Coordinatorと Workerです。
Coordinatorは Masterロールとして1つ、Workerは Slaveロールとして複数存在できます。Coordinatorと Worker、Workerノード同士で通信を行う際には REST APIを使用します。

  • Coordinator
    Coordinatorは Presto(Trino)サービスの中心であり、以下のようなロールを実行します。

    • Clientからリクエストを受ける
    • SQL構文のパース、クエリプランニング
    • クエリを実行する Workerノードの調整、Workerノードのアクティビティのトラッキング
  • Worker
    Workerは Coordinatorから受け取ったタスクを実行し、データを処理します。タスクの実行結果は Workerから Clientへと直ちに転送します。

クエリ実行プロセス

クエリの実行プロセスは、次の通りです。(以下の画像画面を参照)

  1. Presto(Trino) Workerプロセスの開始と Coordinatorの Discoveryサーバへの登録
    • Coordinatorがタスクの実行に Workerを割り当てるには、Discoveryサーバへの登録が必要
  2. Clientは、HTTPを用いてクエリを Coordinatorに転送
  3. Coordinatorはクエリプランを作成し、Connectorプラグインにスキーマデータをリクエスト
  4. Coordinatorは実行するタスクを Workerに転送
  5. Workerは、Connectorプラグインを用いてデータソース(Data Sources)からデータを読み取る
  6. Workerは、メモリでタスクを実行
  7. 実行結果を Clientに直ちに転送

chadoop-4-7-001

データソース

  • Connector
    Presto(Trino)で Connectorは、Databaseでのドライバと同じロールを実行します。すなわち、データソースからデータを読み取るように Coordinatorまたは Workerとデータソースとの間をつなぐロールを果たします。
    Presto(Trino)は、基本的に Hive、MySQL、Kafkaなどの様々なデータソースに対する Connectorを提供します。

  • Catalog
    カタログは、Connectorに対するマウントポイントです。すべてのカタログは、特定の Connectorに関連付けられています。Presto(Trino)は、カタログにマウントされた Connectorを介してデータソースにアクセスできます。例えば、Hive Connectorで Hive warehouseにアクセスするには、/etc/presto/catalog の下位に Hiveカタログ(hive.properties)を構成します。
    Presto(Trino)クエリでは、1つ以上のカタログを使用できます。すなわち、1つのクエリで複数のデータソースを使用できます。
    カタログは、Presto(Trino) configurationディレクトリ(/etc/presto/)の下位の config.propertiesに定義されています。

  • Schema
    スキーマは、テーブルを整理するための方法です。
    1つのカタログとスキーマでクエリの実行を一度で行える対象であるテーブルセットを定義できます。
    Presto(Trino)で Hiveや RDBMSにアクセスする際のスキーマは、ここで対応する概念のデータベースと同じです。
    また、他のデータソースでは、スキーマを構成するためのテーブルを組織化できます。

  • Table
    RDBMSのテーブル概念と同じです。
    Presto(Trino)でテーブルを参照する際には fully-qualified すなわち、カタログ、スキーマ、テーブル名をピリオド(.)で区切って明示する必要があります。
    (例) hive.samples.t1)

参考

Rangerを用いて Catalog、Schema、Tableレベルに対するアクセス権限を制御できます。詳細は、Trinoアクセス権限管理をご参照ください。

Presto(Trino)クラスタを使用する

クラスタ作成

NAVERクラウドプラットフォームコンソールで Cloud Hadoopクラスタを作成します。
クラスタ作成に関する詳細は、クラスタ作成をご参照ください。

参考
  • Cloud Hadoop 1.3から Presto v0.240がインストールされたクラスタを使用できます。

    cloudhadoop-create_ko

  • Cloud Hadoop 1.3ではクラスタが Presto(Trino)タイプで作成されなかった場合でも、Ambari Add Serviceを用いて Presto(Trino)を追加できます。

Ambari UIでの Presto(Trino)サービス確認

Presto(Trino)をインストールすると、Ambari UIで以下のようにサービスを確認できます。このページで、サービスの各コンポーネントを開始または停止できます。

chadoop-4-7-003_ko

  • Summary: コンポーネントがインストールされたホストを確認
  • Configs: Prestoサービスの configurationを変更
  • Quick Links: Presto Discovery UI

主な Configuration

  • jvm.properties
    Coordinator、Workerサーバで使用する JVMオプションを入力します。-Xmxオプションで JVM heapを調整できます。Coordinatorノードと Workerノードのスペックが異なる場合があるため、メモリ設定を分離して適用します。jvm.propertiesの構成は、以下のようにロール別に分離されています。実際のサーバの /etc/presto/confパスの下位には、同じファイル名の jvm.propertiesが存在します。
    chadoop-4-8-005_ko

  • config.properties
    まれなケースではありますが、必要に応じて config.propertiesも Coordinatorと Workerのロール別にメモリをそれぞれ設定できます。主な構成項目の定義は次の通りです。

項目 デフォルト値 説明
query.max-memory-per-node 1G
  • 1つのクエリが Workerで使用できる Userメモリの最大値
  • あるクエリから各 Workerが割り当てられたメモリの中で、この限度を超えるものが1つでもある場合、このクエリの実行をキャンセル
query.max-memory 20G
  • 1つのクエリがクラスタ全体に対して使用できるメモリの最大値
  • あるクエリを通じてすべての Workerノードに割り当てた Userメモリの合計がその限度を超えると、クエリの実行をキャンセル
query.max-total-memory-per-node 2G
  • 1つのクエリがクラスタ全体に対して使用できる User/Systemメモリの最大値
  • あるクエリを通じてすべての Workerノードに割り当てた User/Systemメモリの合計がこの限度を超えると、クエリの実行をキャンセル

chadoop-4-8-006_ko

注意

http-server.http.portを変更する場合、Coordinatorの http-server.http.portと Workerの http-server.http.portを同じく変更します。異なるポートに指定すると、通信は行えません。

  • node.properties
    Presto(Trino)デーモンが使用するログディレクトリ、pidディレクトリなどを設定できます。このディレクトリを変更するには、各サーバでディレクトリの所有者と権限を確認する必要があります。
    node.environmentで現在使用中の environment名を指定できます。
    chadoop-4-8-007_ko

Trino CLI

Trino CLIはクエリを実行できる反応型シェル(shell)を提供します。
Trino Clisのロールが割り当てられたホストでは、いずれもシェルを使用できます。
Trino CLIの使用に関する詳細は、Trino CLI Documentationをご参照ください。

  • Trino CLIを使用するには、まずその環境が構成されたエッジノードに SSHでアクセスする必要があります。
/home1/cdp/usr/nch/3.1.0.0-78/trino/bin/trino-cli --server <COORDINATOR-HOST-IP>:8285
参考

Presto(Trino) Coordinatorサーバアクセス時の <COORDINATOR-HOST-IP>は、エッジノード(e-001)の Private IPアドレスです。Ambari UI > Hostsメニューで確認できます。

  • 使用可能なカタログを確認
trino> show catalogs;
Catalog
---------
hive
system
(2 rows)

Query 20260130_085922_00000_8gfjs, FINISHED, 2 nodes
Splits: 12 total, 12 done (100.00%)
1.41 [0 rows, 0B] [0 rows/s, 0B/s]
参考

データソースを追加してクエリを実行する方法は、Presto(Trino)で Hive warehouseデータを分析するガイドでより詳しく説明します。

Presto(Trino) Discovery UIにアクセス

Cloud Hadoopコンソールで [Application別に見る] から Presto(Trino) Discovery UIにアクセスできます。詳細は、Application別に見るをご参照ください。
cloudhadoop-access-webui_ko

Presto(Trino) Discovery UIページでは、Presto(Trino)サービスの全体的なステータスを確認できます。クエリ履歴も照会できます。
chadoop-4-7-005_ko