イクジニアブログ

育児 + エンジニア = イクジニア

PrestoのGUIが便利な件

最近ハイボールにはまっているにいやんです。こんばんわ。

ビールももちろん美味しいですが、こんな暑い日はキーンと冷やしたハイボールも美味しいですよね! ビールよりもカロリー少ないし、がぶがぶ飲みたい時にはハイボールですね。

さて、Prestoのドキュメントにはあまり(まったく?)書かれていないですが、実はGUIが用意されています。
GUIへのアクセスはprestoが動いてる状態で以下のURLへ

http://prestohost.co.jp:8080/

イメージ f:id:nii_yan:20150727215733p:plain

このGUIではどんなクエリを投げたか確認出来て、クエリ毎には実行計画や実行にかかった時間など確認出来ます。
クエリが失敗した際はエラーログも確認出来るので、GUIを見れば結果の確認はほぼOK。
TimeLineも見れるので時間のかかるクエリを確認したい際など便利ですよね。

ただこのGUI1点残念なのが、クエリを実行した時間がぱっと見でわからないのですよ・・・
一応実行したクエリのIDに時間が入ってるので、それ見ればわかるのですが、UTC時間なので、日本時間にするには9時間足して・・・などと、非常にわずらわしいのです。

そこで、せっかくPrestoはOSSなので、自分で時間を追加してビルドしてしまいましょう。
時間の表示の仕方は実はとても簡単で、

▪️Prestoのソースをcloneしてローカルに持ってきて

 0.112だったら以下のように
 git clone -b 0.112 https://github.com/facebook/presto.git
 (バージョン指定しないと、まだリリースされてないソース取れちゃうので注意)

▪️presto-main/src/main/resources/webapp/index.htmlを開いて143行目ぐらいから以下のソースを追加
stateの変数に値を突っ込んでるあたり

        if (query.state == 'FINISHED' || query.state == 'FAILED') {  
             var fmtFunc = d3.time.format("%Y-%m-%d %H:%M:%S");  
             state += " (" + fmtFunc(new Date(query.endTime)) + ")";  
         }  

▪️あとはmvn clean install -DskipTestsしてビルド!

そうするとpresto-main-0.XXX.jarが出来上がるので、prestoをインストールしたディレクトリのlibしたにぽいって突っ込んであげればあら完成!

以下のようにFINISHEDなどのstateの後ろに時間が表示されるようになりました!
f:id:nii_yan:20150727221317p:plain

これは便利だーって思ってprestoにプルリク出したら、index.htmlはもう情報いっぱいあるからこれ以上だすなと言われてちょっと悲しかったのは内緒ですw
ひとつもぐったquery.htmlに追加した分はマージされました。よかった。