サナギわさわさ.json

サナギさんとキルミーベイベーとプログラミングが好きです

re:dashでEMR上のHive・Prestoクエリを可視化する

BIツールには色々なものがありますが、今回はOSSのre:dashを使ってEMR上で実行するHive・Prestoクエリを可視化してみます。

re:dashとは

re:dashはOSSPython製可視化ツールです。Web UIからRedshift・BigQuery・MySQL・Hiveなど様々なデータソースのクエリを可視化できます。(対応してるデータソースの数がすごく多いです)

redash.io

今回はEMR上のHive・Prestoと接続して可視化を行ってみます。

環境

  • EMR : 4.7.1
  • Hadoop : Amazon 2.7.2
  • Hive : 1.0.0
  • Presto : 0.147
  • re:dash : v0.11.0.b2016

EMR立ち上げ

EMRの立ち上げに関しては割愛します、公式を参考にしてやれば大丈夫かと思います。今回はマスターノードをm3.xlarge1台・コアノードをm3.xlarge2台にして立ち上げました。

https://docs.aws.amazon.com/ja_jp/ElasticMapReduce/latest/DeveloperGuide/gsg-launch-cluster.html

注意点

アプリケーションにHive, Presto-Sandboxを入れるのを忘れないようにして下さい。 HiveServer2に関してはEMR4.7.1では勝手に立ち上がるので大丈夫です。

また、セキュリティグループでHiveとPrestoのポートをre:dashのインスタンスに対して解放しておきましょう。Hiveがデフォルト10000で、Prestoがデフォルト8889です。

re:dashのインスタンス立ち上げ

公式のセットアップ手順は以下です。

http://docs.redash.io/en/latest/setup.html

上のURLにAWSのセットアップ済みAMIが公開されているので、それを使ってインスタンスを立ち上げます。 今回はami-78967519を使いました。

インスタンスタイプはデモならt2.microで十分です。また、セキュリティグループで22,80,443ポートを開けておいて下さい。

依存関係インストール

AMIからインスタンスを作成した場合は特に依存関係のインストールはいらないと思っていたのですが、pythonでHiveと接続するpyHive周りで色々とエラーが出てしまったので依存関係を手動でインストールします。(AMIのバージョンによっては必要ないかもしれません。また、Hiveを使わない場合は必要ない手順だと思います)

$ sudo apt-get update
$ sudo apt-get install libsasl2-dev python-dev libldap2-dev libssl-dev
$ sudo apt-get install git
$ sudo pip install git+https://github.com/dropbox/PyHive.git
$ sudo pip install pyhive[hive]

※pyHiveをpipからインストールしたら No module named TCLIServiceエラーが出てしまったのでgitから直接インストールしています。

re:dashのアップデート

re:dashはかなりアップデートが頻繁で、AMIに入っているバージョンが少し古くなっているので最新版へのアップデートを行います。

公式がアップデート用のfabricスクリプトを提供してくれているので今回はそれを使います。詳しくは以下に記載してあります。

http://docs.redash.io/en/latest/upgrade.html

fabricを用いたアップデート手順

以下のfabfile.pyを使ってください。僕はローカルから実行しました。

re:dash fabfile · GitHub

$ pip install fabric requests
$ fab -H {$hostname} -u {$username} -i {$sshkey(任意)} deploy_latest_release

アクセス

ここまでやったらhttp://[public ip]/loginにアクセスし、以下の画面が表示されることを確認します。

f:id:kakakazuma:20160715202613p:plain

初期ではEmail,Passwordともadminでログインできます。

Hive・PrestoのData Sourcesへの追加

EMR上のHive・Prestoをデータソースに追加します。その他のデータソースに関してはhttp://docs.redash.io/en/latest/datasources.htmlをご覧ください。

http://[public ip]/data_sourcesにアクセスし、「New Data Source」を選択します。

Typeから「Hive」「Presto」を選択し、必要項目を入力します。 HostにはEMRクラスタのマスタノードのIPを入力して下さい。

f:id:kakakazuma:20160715202625p:plain

f:id:kakakazuma:20160715202639p:plain

クエリの可視化

データソース選択

実際にクエリを可視化してみます。http://[public ip]/queries/newにアクセスし、「Data Source」で先ほど登録したHiveデータソースを選択してみます。

Hiveに登録済みのテーブルがあれば画面左側に表示されます。

f:id:kakakazuma:20160715202025p:plain

クエリ可視化

最後に実際にクエリを入力し、「Execute」を押します。 画面下にクエリ結果が出て来れば成功です。あとは「NEW VISUALIZATION」から適当に可視化してください。

クエリの最後に;が入っているとエラーになるので注意してください。それ以外の理由で上手くいかない時は/opt/redash/logsを見てみましょう。OSSなのでコードとログを両方見れば何とかなるはずです。

f:id:kakakazuma:20160715202036p:plain

終わり

以上です。最近可視化ツールも増えてきましたが、re:dashはクエリのスケジュール実行ができたりデータソースが多かったり、何よりOSSで面白いので是非触ってみてください。