Cloud HadoopでPrestoを使用

目次

Presto Overview

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に転送します。

クエリの実行過程

  1. Presto Worker プロセスがスタートしたらCoordinatorのDiscovery Serverに登録されます。Discovery Serverに登録されるとCoordinatorがタスク実行にWorkerを割り当てることができます。
  2. ClientはHTTPでクエリをCoordinatorに転送します。
  3. Coordinatorはクエリプランを作成します。この際、Connector Pluginにスキーマデータをリクエストします。
  4. CoordinatorからWorkerに実行しなければならないtaskを転送します。
  5. WorkerはConnector Pluginを通じてData Sourcesからデータを読み取ります。
  6. Workerはメモリーでタスクを実行します。
  7. 実行結果をすぐ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サービスに関する全体的な状態が分かります。クエリ記録も照会できます。

に対する検索結果は~件です。 ""

    に対する検索結果がありません。 ""

    処理中...