Cloud HadoopでPrestoを使用
目次
このページではPrestoサービスについてご紹介し、Cloud HadoopでPrestoを使用する方法をご説明します。
Presto Overview
このセクションではPrestoがどのように構成されているか、クエリがどのように実行されるかをご説明します。
PrestoはTB, PB 単位のデータを分散クエリ(distributed queries)を用いて分析できるツールです。 HDFSだけでなく、Hive Warehouse, RDBMSなど多様なソースからデータを読み取ることができます。
クエリがMapReduce Jobで実行される Hive, Pigとは異なって、Prestoには別途のクエリ実行エンジンが実装されています。段階別結果をDiskに書き込まずにメモリーからメモリーにデータを転送す構造であるため、 HDFSに保存されたデータをHiveより迅速でinteractiveに分析できます。従ってTableau のようなBI ToolではHiveよりPrestoが連動に適しています。
PrestoもHive, PigのようにOLAP作業を処理するためにデザインされたため、Transaction中心の伝統的な RDBMSを代替することはできません。
Components
Presto サービスを構成するコンポーネントは大きく二つで、Coordinator, Workerがあります。 CoordinatorはMasterの役割として一つ、WorkerはSlaveの役割として複数存在することができます。CoordinatorとWorker, Workerノード間で通信する際はREST APIを使用します。
1. Coordinator
CoordinatorはPrestoサービスの中心で、以下のような役割を実行します。
- Clientからリクエストを受ける
- SQL文のparsing, クエリプランニング
- クエリを実行するWorkerノードの調整、Workerノードの活動をトラッキング
2. Worker
WorkerはCoordinatorから転送されたタスクを実行し、データを処理します。タスク実行の結果はすぐWorkerからClientに転送します。
クエリの実行過程
- Presto Worker プロセスがスタートしたらCoordinatorのDiscovery Serverに登録されます。Discovery Serverに登録されるとCoordinatorがタスク実行にWorkerを割り当てることができます。
- ClientはHTTPでクエリをCoordinatorに転送します。
- Coordinatorはクエリプランを作成します。この際、Connector Pluginにスキーマデータをリクエストします。
- CoordinatorからWorkerに実行しなければならないtaskを転送します。
- WorkerはConnector Pluginを通じてData Sourcesからデータを読み取ります。
- Workerはメモリーでタスクを実行します。
- 実行結果をすぐClientに転送します。
Data Sources
Connector
PrestoでConnectorは DatabaseでのDriverのような役割を実行します。つまり、Data Sourceでデータを読み取れるようにCoordinatorまたはWorkerとData Source間をつなげてくれる役割をします。
Prestoは基本的にHive, MySQL, Kafkaなど色んなData Sourceに関する Connectorを提供します。
全てのCatalogは特定Connectorと関連しています。
Catalog
CatalogはConnectorに関するマウントポイントです。PrestoはCatalogにマウントされたConnectorを通じてデータソースにアクセスできます。例えば、Hive ConnectorでHive warehouseにアクセスするためには/etc/presto/catalog
下に Hive Catalog(hive.properties
)を構成します。
Presto クエリでは一つ以上のCatalogを使用できます。つまり、一つのクエリで複数の Data Sourceを使用できます。
CatalogはPresto configuration directory(/etc/presto/
) 下のconfig.properties
に定義されています。
Schema
スキーマ(Schema)はテーブルを整理するための方法です。 一つのカタログとスキーマで一つのクエリを実行できる対象である テーブルセットを定義できます。
PrestoでHiveやRDBMSにアクセスする際、スキーマはここで対応される概念であるデータベースと同じく考えられます。 その他に、他のデータソースではスキーマを構成するために、それなりにテーブルを組織化できます。
Table
RDBMSでのテーブルの概念と同じです
PrestoでTableを参照する際はfully-qualified つまり、カタログ、スキーマ、テーブル名をドット(.)で分離して明示しなければなりません。
(例: hive.samples.t1
)
Prestoクラスタを使用する
このセクションではCloud HadoopでPresto タイプのクラスタを生成して使用する方法についてご説明します。
クラスタの生成
Cloud Hadoop 1.1からPresto v0.214が設置されたクラスタを使用できます。以下のように選択して次の段階を進めます。次の手順はクラスタの生成と同じです。
そして、Prestoタイプでクラスタを生成しなくても Amabari Add Serviceを利用してPrestoを追加できます。
Ambari UIでPrestoサービスの確認
Prestoを設置するとAmbari UIで次のようにサービスを確認できます。このページでサービスの各コンポーネントをスタート、中止できます。
- Summary: 各コンポーネントがどのホストに設置されたか確認できます。
- Configs: Prestoサービスのconfigurationを変更できます。
- Quick Links: Presto Discovery UIです。このリンクでアクセスするためには トンネリングが必要です。 パブリックIPを通じたアクセスをお勧めします。
主なConfiguration
config.properties
クエリ性能をチューニングするのに有効なパラメータです。
query.max-memory
: 一つのクエリが使用できるメモリー合計の最大値。ここで合計とは、クエリが分散されて実行される際に実行される全てのノードで使用できるメモリーの合計query.max-memory-per-node
: 一つのクエリが一つのノードで使用できるメモリーの最大値
jvm.config
content
: Coordinator, Worker サーバで使用するJVM option
node.properties
node.environment
: environment 名
Presto CLI
Presto CLIはクエリを実行できる反応型シェルを提供します。 Preto Clis 役割が割り当てられたホストでは全てのシェルを使用できます。
Presto Coordinatorサーバにアクセスします。
/usr/lib/presto/bin/presto-cli --server <COORDINATOR-HOST-IP>:8285
使用できるCatalogを確認できます。
presto> show catalogs;
Catalog
---------
system
(1 row)
Query 20190430_020419_00001_j79dc, FINISHED, 2 nodes
Splits: 36 total, 36 done (100.00%)
0:07 [0 rows, 0B] [0 rows/s, 0B/s]
データソースを追加してクエリを実行する方法は PrestoでHive Warehouse データを分析するからより詳しくご説明します。
その他に使用できるCLI オプションは以下の通りです。
--catalog <catalog>
Default catalog to connect to
--client-request-timeout <client request timeout>
Client request timeout (default: 2m)
--debug
Enable debug information
--enable-authentication
Enable client authentication
--execute <execute>
Execute specified statements and exit
-f <file>, --file <file>
Execute statements from file and exit
-h, --help
Display help information
--keystore-password <keystore password>
The password for the keystore. This must match the password
specified when creating the keystore
--keystore-path <keystore path>
The location of the Java Keystore file that will be used to
secure TLS
--krb5-config-path <krb5 config path>
Kerberos config file path (default: /etc/krb5.conf)
--krb5-credential-cache-path <krb5 credential cache path>
Kerberos credential cache path
--krb5-disable-remote-service-hostname-canonicalization
Disable service hostname canonicalization using the DNS reverse
lookup
--krb5-keytab-path <krb5 keytab path>
Kerberos key table path (default: /etc/krb5.keytab)
--krb5-principal <krb5 principal>
Kerberos principal to be used
--krb5-remote-service-name <krb5 remote service name>
Remote peer's kerberos service name
--log-levels-file <log levels file>
Configure log levels for debugging using this file
--output-format <output-format>
Output format for batch mode [ALIGNED, VERTICAL, CSV, TSV,
CSV_HEADER, TSV_HEADER, NULL] (default: CSV)
--schema <schema>
Default schema
--server <server>
Presto server location (default: localhost:8080)
--session <session>
Session property (property can be used multiple times; format is
key=value; use 'SHOW SESSION' to see available properties)
--socks-proxy <socks-proxy>
SOCKS proxy to use for server connections
--source <source>
Name of source invoking the query (default: presto-cli)
--truststore-password <truststore password>
The password for the truststore. This must match the password you
specified when creating the truststore
--truststore-path <truststore path>
The location of the Java Truststore file that will be used to
secure TLS
--user <user>
Username
--version
Version of the CLI
Presto Discovery UI
Cloud Hadoopコンソール上段のApplication-Specific Viewsを通じてPresto Discovery UIにアクセスできます。
Prestoサービスに関する全体的な状態が分かります。クエリ記録も照会できます。