LinkedIn WhereHowsの概要と起動


こんにちは、@s_tsukaです。

最近はビッグデータ関連の仕事をしています。HadoopとかSparkとかデータの永続化とかそういう部分です。

ビッグデータにはデータカタログという種類のシステムがあります。データカタログは文字通りの意味でデータのカタログです。例えばhttp://www.data.go.jp/には政府公式のデータが可視化されて置いてあります。もちろん置いてある実体はどこかのストレージですが、ストレージではなく、可視化する部分の責務を担当するのがデータカタログです。

上記の政府のサイトでは独自のシステムが組まれていますが、データカタログには自由に使えるソフトウェアもあります。LinkedInがOSS化したWhereHowsもデータカタログの1つです。最近このWhereHowsを色々触っているので、これについて解説していきます。

ちなみに他にもMicrosoft AzureのData catalogやClouderaのEnterpirse版でのみ利用できるCloudera Navigatorなどがあります。

WhereHowsとは

WhereHows(linkedin/WhereHows)はデータカタログのソフトウェアです。

大きくwebとbackend-serviceというソフトウェアを持っており、webはwebアプリケーションです。DBに保存されたカタログデータ(データのメタデータなど)をブラウザ経由で表示するためのものです。backend-serviceはwebサービスです。定期的にデータをスクレイピングするなどしてメタデータを収集・保存するためのものです。

開発は大きくJava, Jython, JavaScriptが使われており、フレームワークはPlay2, Ember.js、ビルドはactivator, sbt, gradleが、ミドルはMySQLとオプションとしてElasticsearchが使われています。webもbackend-serviceも両方Play2+Javaで書かれていますが、メタデータを各種Hadoopのソフトウェアからスクレイピングする処理は一部Jythonで書かれています。Play2なのでHTMLのテンプレートエンジンにtwirlが使われていますが、これはユーザ情報やCSRFトークンを渡すためだけに使われており、実際の動的な部分はほとんどがEmber.jsで書かれています。

実装についてはコードを読むしかありませんが、アーキテクチャや使い方の詳細については公式Wikiが参考になるため、まずは一読すると良いと思います。画像なども載っているため、どういうソフトウェアなのか動作を軽く掴むことができると思います。

webは基本的に参照だけです。つまりbackend-serviceがどこをスクレイピングするなどの登録系のオペレーションはできません。将来的にはできるかもしれませんが、現状ではbackend-serviceのAPIをコールして操作するか、DBの値を直接操作するしかありません。

backend-serviceの処理には色々な種類があり、例えばHDFSに保存されているデータのメタデータを収集したり、Oozieの実行データを収集したりがあります。この一覧もWikiにあるので、それを参照してください。基本的にはデータセットのメタデータを収集するか、データのLineage(データAはデータBから作られた、というような系譜情報)を収集するかのどちらかです。

WhereHowsの利用の流れ

WhereHowsは以下の流れで利用します。

Docker以外での利用

  1. WhereHowsのコードをダウンロード
  2. https://github.com/linkedin/WhereHows/wiki/Getting-Started に従ってビルド。ACTIVATOR_HOMEやSBT_OPTSを忘れずに
  3. distでPlayアプリのzipができるので、これを適当なサーバに持っていき、解凍。バイナリを実行してアプリを起動。application.confにDBの接続先などがあるので、このあたりは環境変数で適宜変更。この辺はdocker化してもいいですね。 (というかplay.crypto.secretが変えてなかったり、localhost固定になってたり色々問題があるので一通り変えてからビルドしたほうがいいです)
  4. backend-serviceのAPIを叩いてJOBを登録 (ここが一番むずかしいです。10以上のpropertyを登録する必要があります。Wikiを読んだだけでは理解できないので、コードを読んだ方が良いです。今後別の記事で解説していきます)
  5. webへブラウザでアクセス。サインアップ後にサインイン
  6. 4のJOBが正しく動いていれば、この時点でデータセットやリネージュが見れる

Dockerでの利用

https://github.com/linkedin/WhereHows/pull/478 こちらのPRでdocker composeが用意されました。

使ってみたところ不完全だったので、いくつかPR出して直しておきましたので、今は使えると思います。

https://github.com/linkedin/WhereHows/blob/master/docker/README.md こちらのREADMEにしたがってdocker-composeで動かすことができます。docker-composeをインストールしておき、JDKをDLして特定のフォルダに入れ、prepare-docker-archives.shを実行してからdocker-compose upでOKです。あとはブラウザでwherehows webが見れます。

動かした後は上記のStep4以降と同じです。

まとめ

データカタログとWhereHowsについて簡単に解説しました。application.confの罠さえ回避すれば2日もあれば起動まで余裕で行けると思います。JOB登録は結構難しくてHDFSをスクレイピングするJOBを正しく登録するのに自分の場合、2日ほどかかりました。

Web UIは結構簡素ですが、十分な機能を揃えていると思います。OSSで使えるのはかなり嬉しいですね。拡張もできますし(実際にした)

LinkedInに感謝です。

今後は一番難しいJOB登録周りについて調査していくので、そのあたりまたblogに書こうと思います。