Webサービスの運用にデータを活用する場合、まず改善のための仮説を立てます。そして、その仮説が正しいか検証するために、データベースから関連するデータを抽出します。
このデータを抽出する作業は、解析内容が複雑になるほど、そしてデータが多いほどに、時間がかかります。
データを抽出するのに時間がかかると、仮説を検証をするのに長い時間がかかり、サービスの改善スピードが低下してしまいます。
大規模データもサクサク分析するためのSQLエンジン
PrestoはFacebookが開発した分散SQLクエリエンジンです。
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サーバに接続すると、クエリのステータスが確認できるようです。
これで、インストールは完了です!実運用で使えるか検証してみようと思います。
コメント
[…] 分散SQLクエリエンジンPrestoをMac OS Xにインストール […]
[…] 分散SQLクエリエンジンPrestoをMac OS Xにインストール 高速な分散処理エンジンApache Sparkの操作を対話シェルで試してみる! […]