次世代データ分析基盤としてApache Sparkが非常に注目されていますが、データ分析の重要な要素としてデータの可視化(Visualization)が挙げられます。
PythonやRではその辺のツールも充実しています。(Matplotlib, ggplot etc...)
さらに、インタラクティブ環境下でコード実行したり、グラフを描画することが可能なiPython NotebookやRStudioなどは分析者にとって非常に便利です。
Apache SparkをiPython Notebookのような環境で動作させるソフトウェアとして、現在Databricksが「Databricks Cloud」を開発しています。
しかし、現在一部のユーザにしか公開されていないため、誰でも気軽に使える環境にはなっていません。そこで、Databricks Cloudと同じような環境を提供してくれる「Apache Zeppelin(Incubator)」のインストール方法を紹介します。
公式サイトにもある通り、ZeppelinはNotebookという単位でインタラクティブシェルのようなものを用意しており、SparkSQLを使って構造化されたデータを用意することや、SparkStreamingを使ってtwitterからデータを取得しつつ、実行結果をグラフなどで表示することができるようになっています。
また、100%オープンソースでもあるので、気軽に利用することが可能です。
環境
- Mac OSX 10.9.5 Mervericks
- JDK 1.7.0_76
- Maven 3.2.5
- Node.js (npm) 0.10.33
インストール
まず、ローカルにリポジトリをクローンします。
git clone https://github.com/apache/incubator-zeppelin.git
cd zeppelin
次に、Mavenを使ってビルドします。
この際、sparkのver.を指定することができます。
(defaultが古いので新しいver.を指定しましょう。)
mvn clean package -Pspark-1.2 -DskipTests
ビルドが終了すれば、もう実行することができます。
./bin/zeppelin-daemon.sh start
localhost:8080にアクセスするとトップページが見れます。
サーバーを停止する際は次のコマンドを入力します。
./bin/zeppelin-daemon.sh stop
Tutorial
起動するとNotebookを選択することが可能になります。
選択項目を見ると最初から「Zeppelin Tutorial」のNotebookが用意されています。
これを見るとSparkSQLとVisualizationでどんなことができるか把握することができます。
また、公式ページ内にはSparkStreammingを使ってtwitterから取得したデータに対して簡単な言語処理をやっています。
便利と感じた機能
Display
HTMLや画像、簡単なテーブルなどを標準出力経由で表示することができます。
println("%html <p style=\"font-size:200%; color:red\">Important!!</p>")
Dynamic forms
templateのようにコードの中に次のような変数を埋め込むことができます。
// Hello world
println("Hello, " + z.input("name", "world"))
-- maxAgeよりageの高いuserを取得する
%sql SELECT * FROM users WHERE age > ${maxAge=30}
このように埋め込んだ変数は描画された結果の横にフォームが設置され、コードを変更せずに値だけを変更することができます。
また、値を変更すればその結果がすぐにグラフなどに反映されます。
Collaboration
同じURLに対して複数の人間が操作することが可能になります。
内部でWebSocketが動いており、更新があれば今見ているページが非同期に更新される。
また、実行結果だけをURLとして切り出すことが可能になっており、他人などに共有することもできます。