分散SQLクエリエンジンPrestoをMac OS Xにインストール

Webサービスの運用にデータを活用する場合、まず改善のための仮説を立てます。そして、その仮説が正しいか検証するために、データベースから関連するデータを抽出します。

このデータを抽出する作業は、解析内容が複雑になるほど、そしてデータが多いほどに、時間がかかります。

データを抽出するのに時間がかかると、仮説を検証をするのに長い時間がかかり、サービスの改善スピードが低下してしまいます。

大規模データもサクサク分析するためのSQLエンジン

PrestoはFacebookが開発した分散SQLクエリエンジンです。

スクリーンショット 2014-11-08 0.47.07

Presto | Distributed SQL Query Engine for Big Data

Prestoの特徴などについてはいったん触れずに、とりあえず動かせる状態にしてみます。まずは、Mac OS Xにインストールしてみます。

パッケージの配置

導入手順はこちらを参照しつつ、やっています。

2.1. Deploying Presto — Presto 0.81 Documentation

まずは、インストール用のディレクトリを作っておきます。

sudo mkdir -p /var/presto/installation
sudo mkdir -p /var/presto/data

installationディレクトリに実行ファイルを置き、dataディレクトリにはログなどが保存されます。

ダウンロードしたファイルをinstallationディレクトリに配置します。

tar xvf presto-server-0.81.tar.gz 
sudo mv ./presto-server-0.81/* /var/presto/installation/

これで配置は完了です。

Prestoの設定ファイルの記述

設定を記述していきます。設定は、installationディレクトリ直下にetcディレクトリを作り、そこに配置していきます。

sudo mkdir -p /var/presto/installation/etc

まずは、Prestoの設定ファイルを記述します。

cat << EOT > /var/presto/installation/etc/config.properties
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
task.max-memory=1GB
discovery-server.enabled=true
discovery.uri=http://localhost:8080
EOT

続いて、ノードの設定ファイルであるnode.propertiesを書きます。

cat << EOT > /var/presto/installation/etc/node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/presto/data
EOT

Prestoは分散クエリエンジンで、中央に配置されるCoordinatorと、分散ノードが担うWorkerに役割が分かれます。

そして、JVMの設定ファイルを書きます。

cat << EOT > /var/presto/installation/etc/jvm.config
-server
-Xmx16G
-XX:+UseConcMarkSweepGC
-XX:+ExplicitGCInvokesConcurrent
-XX:+CMSClassUnloadingEnabled
-XX:+AggressiveOpts
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:MaxPermSize=150M
-XX:ReservedCodeCacheSize=150M
EOT

PrestoはJavaで実装されていて、JVM上で動作します。

ログレベルを設定します。

cat << EOT > /var/presto/installation/etc/log.properties
com.facebook.presto=DEBUG
EOT

Prestoは、プラグイン設計になっていて、様々なデータソースを利用することが可能です。プラグインの設定は、catalogディレクトリに配置します。

sudo mkdir -p /var/presto/installation/etc/catalog

まずは、手軽なMySQLで試してみます。

cat << EOT > /var/presto/installation/etc/catalog/mysql.properties
connector.name=mysql
connection-url=jdbc:mysql://localhost:3306
connection-user=root
connection-password=test
EOT

これでPrestoの準備完了です。

クエリの実行

さっそく起動してみます。ダウンロードしたファイルの中に、起動スクリプトも同梱されています。

sudo /var/presto/installation/bin/launcher start

これでPrestoが無事に起動できたら、PrestoのCLIツールを使って、クエリを実行してみます。

CLIツールはこちらからダウンロードできます。

2.2. Command Line Interface — Presto 0.81 Documentation

まずはpresto-cliのシェルを起動します。

./presto --server localhost:8080 --catalog mysql --schema mytable

そして、SQLを投入します。

presto:mytable> SELECT COUNT(*) FROM account;
 _col0 
-------
    20 
(1 ROW)
 
Query 20141107_101955_00002_94b7e, FINISHED, 1 node
Splits: 2 total, 2 done (100.00%)
0:00 [20 ROWS, 0B] [41 ROWS/s, 0B/s]

Prestoから結果が返りました!

ちなみに、ブラウザでPrestoサーバに接続すると、クエリのステータスが確認できるようです。

スクリーンショット 2014-11-08 1.23.02

これで、インストールは完了です!実運用で使えるか検証してみようと思います。

About katty0324

Scroll To Top