Kekeの日記

エンジニア、読書なんでも

Apache Prestoを使ってApache Zeppelinから分散クエリを投げて可視化する

スクリーンショット 2018-08-24 16.43.39.png

Apache Prestoとは

Treasure Dataさんから非常に詳しい記事があるので紹介させていただきます。

tug.red

Apache Zeppelinとは

以下の記事で以前、解説させていただきました。

www.1915keke.com

記事の目的

以前の記事では問題がありました。

今回は完全に個人的なプライベートLine Botだったので捌くデータも数件/dayのような感じでした。

一年間運用しても、データの数はそんなに多くありません。

しかし、もし卒業して、会社に勤めたらそうはいかないかもしれません。

そのときに大量にデータがあると、クエリを投げても可視化する環境があっても取得までに時間がかかってしまうかもしれません。

そういうときにApache Prestofで分散クエリを投げれば、処理速度はスケールアウトすることができて、ニアリアルタイムで可視化できます。

アーキテクチャ

以下のようにアーキテクチャがあります。

Line Botの部分は省略しています。

スクリーンショット 2018-08-24 16.43.39.png

インストール

Apache Prestoのイントール方法は以下の記事で解説しています。

また、Apache Zeppelinも以下の記事でインストールまで解説しています。

セットアップ

1. Apache PrestoのMySQLへの接続

MySQLが動作していることを確認してください。

$ sudo mysql.server status
 SUCCESS! MySQL running (39772)

まず、接続するにはcatalogを作らないといけません。

PRESTO_HOME/etcの中にmysql.propertiesで設定を書き込んでいきます。

以下のように書き込んでください。

connector.name=mysql
connection-url=jdbc:mysql://localhost:3306
connection-user=root
connection-password=secret

それでは接続してみます。

まず、Prestoサーバーを起動させてください。

brew services start presto

以下のようにhttp://localhost:8080/uiで確認できれば大丈夫です。

スクリーンショット 2018-08-24 17.24.57.png

$ presto --catalog mysql --schema yamashita_bank
presto:yamashita_bank>                                                                                                                                                                                                               

ここで、schemaはデータベース名です。

2. Apache ZeppelinのApache Prestoへの接続

次にApache Zeppelinを Apache Prestoに接続します。

まず、Apache Zeppelinを起動させます。

スクリーンショット 2018-08-24 17.56.38.png

そして、Interpreterを定義しないといけません。

スクリーンショット 2018-08-24 17.56.38.png

以下のように設定します。

デフォルトではPrestoのCluster Masterはポートは8089です。

これでInterpretorも作成できました。

分散クエリを投げて可視化してみる

実際にInterpretorを使ってApache Zeppelinで可視化してみます。

以下のようにInterpretorとSQLを書いて実行してみます。

スクリーンショット 2018-08-24 18.21.28.png

同様の結果です。

スクリーンショット 2018-08-24 18.22.29.png

まとめ

いとも簡単に分散クエリによって可視化できるのでよい。

次は、tier storageを挑戦してみたい。Apache KafkaとMySQLを同時にクエリを投げてみたいと思います。

参考文献