adtech studio

Zeppelinを使って実行環境付きドキュメントを作った話

By shota

RightSegment Zeppelin

こんにちは、RightSegmentの府川(@fuppi)です。
最近開発環境にApache Zeppelinを導入したのですが
「実行環境付きScalaドキュメント」や「複数システムのデータ確認」として役立っているので、ご紹介したいと思います。

Apache Zeppelinとは

  • Webブラウザ上で、インタラクティブに処理ができる
  • 複数言語、複数システムに対応
  • オープンソース
という特徴があり、Zeppelin上で、データの抽出、加工、可視化まで、1画面上で行うことができます。
似たものにJupyterSpark Notebookなどもあります。
スクリーンショット 2016-07-07 22.47.39

導入の仕方

GitHubにソースがあるのでcloneして、mavenでインストールを行えばすぐ使えるようになります。
オプションで、「-Pspark-1.6」と指定するだけでZeppelinと一緒にSpark1.6がインストールされます。
Zeppelinのインストールをして、Sparkのインストールをして… と複数手順を踏まず、ここでまとめて入れることができるのはありがたいです。

今回は、Sparkのみ入れましたが、他にもhadoopや、pyspark、maprなどを入れることも可能です。
詳しい手順はGitHubを参考にしてください。

デーモン起動

これで、http://localhost:8080 へアクセスすると使えます。
 スクリーンショット 2016-07-07 16.28.31

csvファイルからSparkSQLのテーブルを作成する

環境ができたので、試しにローカルのcsvファイルを読み込んでSparkSQLのテーブルを作ってみます。
その前にspark-csvというcsv読み込み用の外部ライブラリを使いたいのでInterpreterから設定を行います。
Interpreter -> spark -> Dependenciesに、「groupid:artifactid:version」となるように設定をします。

外部ライブラリを使いたい時はここに設定すれば使えます。
regist_library_medium
また、InterpreterではZeppelinの特徴である、複数言語・複数システムを扱うための設定が行えます。
デフォルトで、17個ものプラグインが存在していて、更に必要に応じて自分で作れるようドキュメントも用意されています。
Writing a New Interpreter
ライブラリも入ったところで処理へ移ります。

これでテーブル作成は完了です。

データの可視化をする

Scalaでデータ取得処理を書くこともできますが、以下の用にしてもテーブルにアクセスできます。

クエリを実行するだけで、可視化まで自動で行ってくれるので、分布を見てみたい時などはこちらの方が使い勝手が良いです。
スクリーンショット 2016-07-11 9.41.04
また表や円グラフ、散布図などへボタン一つで切り替えができ
settingsから縦軸・横軸に使う変数を切り替えたり、グルーピングする変数を設定したり、細かい調整も可能です。
 スクリーンショット 2016-07-11 9.59.50
SparkSQL内に”${変数名}”と入れれば、入力した値に応じてグラフが変更されるようになります。

engraph

“${変数名=初期値,メニュー1|メニュー2|メニュー3}”のようにするとプルダウンメニューを作ることもできます。

pulldown

ノートブックの処理を定期的に再実行をするように設定もできるので、これらを組み合わせれば、簡易管理ツールを作ることができます。

zeppelin_cron

実行環境付きドキュメントとしての活用

Zeppelinを共有のサーバに入れ、最初に環境設定さえ済ませてしまえば、皆が同じコードを実行することができます。
どこかのサイトを見ながら処理を書いても、環境依存によるエラーが出て、出鼻をくじかれるなんてことはよくあると思いますが、
ノートブックをドキュメントとして残しておけば、とりえあず動かしてみるという第一歩は、誰でも踏み出すことができます。
これって学習のモチベーション維持には重要ですよね。
Scala初心者向けの簡単なものからストリーミング処理や機械学習のようなものまで、ドキュメントとして残しておくことで
別の人が同じようなことをやる時は、最初からアルゴリズムの方に注力できるので作業効率は上がるでしょう。

スクリーンショット 2016-07-22 14.43.17

まとめ

ブラウザ上で
  • 複数システムにつなげ、データ抽出ができる
  • mllibなどのSparkのライブラリを使える
  • 手軽にデータの可視化ができる
などの点から、アナリストが分析のために使用しているのをよく目にしますが
文字だけのドキュメントではなく、実行環境付きドキュメントというのは、エンジニアにとってもメリットは大きいものです。
ぜひ、使ってみてください。