yanagishima v7をリリースしました。

yanagishimaは割とカジュアルにメジャーバージョンを上げていて、作っている方も正直ちゃんとchange logを管理してないのはよくないのですが、最近7.0をリリースしました。

3.0のリリースブログがyanagishima v3をリリースしました。 - wyukawa’s blogなんで4,5,6はどうしたんだというツッコミは置いときます。

7.0はhive対応がメインです。3.0からの変更という意味ではいっぱいあるんだけど忘れた。。。デスクトップ通知、テーブル補完、テーブルバリデーション、ブックマークにタイトル追加、クエリをfluentd経由でロギング、見せたくないスキーマを非表示、、、あたりかな。

うちの環境だとhiveでバッチを書いてアドホッククエリはprestoというすみわけで、prestoでデータチェックできればほとんどのケースで困らないんですが、hiveを使いたいケースもたまにあります。

例えばバッチでhive viewを使っているケースです。prestoからhive view見れないですからね。
まあそれ以外にもたまにhiveを使いたいケースがあるだろうということと、僕がStrata Data Conference in Singapore 2017で喋る予定なのでそこでyanagishimaがpresto, hive両方対応している方が多少なりともインパクトあるだろうということで実装しました。最近流行りのカンファレンス駆動に近いものがあります。ただyanagishimaが日本人以外には発音しにくいということに最近気づきました。。。まあ長い名前というのもありますが、ただ長いおかげでSEOに強いという側面もあったりします。

閑話休題

yanagishimaがhive対応するにあたってどうやったかというと普通にjdbc使いました。

prestoではJDBC使ってないです。その理由は、yanagishimaでなぜJDBCを使ってないのか - wyukawa’s blog

hiveはprestoと違ってjobをsubmitしたあとに戻り値でapplication idを取れないので、そこは工夫が必要なところなのですが、そこは先人の知恵を借りてGitHub - tagomoris/shib: WebUI for query engines: Hive and Prestoの方式を採用しています。

どうやっているかといういとyanagishima側で独自のid(例:20170809_164758_ac5624e46a802ea3acdcff3fdfa100d1)を生成してそれをset mapreduce.job.name=...を使ってjob名にセットします。例えば、yanagishima-hive-20170809_164758_ac5624e46a802ea3acdcff3fdfa100d1

Yarnのジョブ一覧はresource manager APIの/ws/v1/cluster/appsをたたけば取れるのであとはこの一覧からjob名をgrepしてapplication idを取得するという流れです。application idさえ取れればkillできます。

https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html#Cluster_Applications_API

注釈:startedTimeBeginをつけないと最新のjobを取ってきてくれない環境もありました。

こういう流れなのでset mapreduce.job.name=...が使える環境、つまりHive on MRでかつセキュリティ的な制約が無い環境じゃないと完全には動かないと思います。
まあHive on Tezでも動きそうな気がするけど、少なくとも自分がクエリ投げた画面でkillはできない。一覧から探してkillはできると思うけど。

またhadoopのresource managerのapplication idごとの画面にはX-Frame-Options SAMEORIGINが付いてるのでiframeで表示できないためprestoと違って新規ウィンドウで表示するようにしています。

hive対応したこともあり設定できる項目が増えて、設定ファイルの書き方が難しくなっている状況です。

7.0を出した後も細かい改善は随時入れています。社内でアンケート取ってフィードバックもらって、すぐ対応できそうなものからやっているという感じです。その辺が一通り終わったら8.0出すと思います。

本当はドキュメントやデモサイトも整備したほうがいいんですが、そこまで手が回ってない状況です。