Kekeの日記

エンジニア、読書なんでも

Apache ZeppelinでLine Botのデータを可視化する

スクリーンショット 2018-08-23 1.38.49.png

本記事

Apache Zeppelinを実際に触ってみて、動作や運用条件の雰囲気を掴みたいので、そのための備忘録である。

実際に動かしているアプリケーションで使ってみる。

注意

Apache Zeppelinとなると、Apache Hadoopなどに対して使う人が多いのではないかと思いますが、あくまでもMySQL環境で試してみます。

Line Botアプリケーション

実際のアプリケーションは以下のように簡単で、誰かと一ヶ月の使った額を記録し、決算したりするものです。

IMG_7D5A35DE88E9-1.jpeg

実際のメタデータを見せることはプライバシーの観点から控えさせていただきますが、私の家庭内で使うものなのでテーブルは非常に簡単で記録用のrecordsテーブルしかありません。

構成

以下のような構成になっています。

スクリーンショット 2018-08-23 1.38.49.png

Apache Zeppelinの特徴、コンセプト

やはり、アーキテクチャやコンセプトを知らずにビルトしてチュートリアルを走らせても理解できないと思ったので公式ページをみてやっていこうかなと思います。

特徴

Apache Zeppelin以下の特徴があります。 (注意: Zeppelin内での「ノートブック」はjupyter notebookの概念と似ています)

  • 多様な目的に使えるノートブックである

    • データ取得
    • データ調査
    • データ解析
    • データ可視化、統合 image.png
  • いろんなバックエンドをサポートしている

    • Apache Sparkも image.png
  • リッチなデータ可視化

  • ダイナミックフォーム
  • ノートブック共有機能

MacでApache Zeppelinデーモンを起動する

以下のように検索して、インストールします。

brew search zeppelin
                                                                                                                                                                                                                                                 
==> Formulae
apache-zeppelin

brew install apache-zeppelin

そして、インストールされたディレクトリに移動します。 私のバージョンでは0.8.0だったのでZEPPELIN_HOMEとなる以下のパスに移動します。

cd /usr/local/Cellar/apache-zeppelin/0.8.0/libexec

すると以下のディレクトリ構成になっています。

.
├── bin
├── conf
├── interpreter
├── lib
├── licenses
├── notebook
└── zeppelin-web-0.8.0.war

まず、重要なのは設定ファイルが入っているconfディレクトリで、以下のようになっています。

./conf
├── configuration.xsl
├── interpreter-list
├── log4j.properties
├── log4j_yarn_cluster.properties
├── shiro.ini.template
├── zeppelin-env.cmd.template
├── zeppelin-env.sh.template
└── zeppelin-site.xml.template

主な設定項目はzeppelin-site.xml.templateになります。 しかし、このままでは反映されないため、.templateを除去します。

cp zeppelin-site.xml.template zeppelin-site.xml

私は普段からApache Nifi, Storm, Vue.jsなどデフォルトポートが8080のものを多く使うので、ポートだけ先にちゃっと変更しとこうと思います。

そして作ったzeppelin-site.xmlの中に以下の設定タグがあるので設定し、ポート番号8092で接続します。

...
<property>
  <name>zeppelin.server.port</name>
  <value>8092</value>
  <description>Server port.</description>
</property>
...

ポートを変更したら起動してみましょう。

bin/zeppelin-daemon.sh start

Web UIで確認してみます http://localhost:8092 がURLとなります。

以下の画面が見れれば正常に起動できています。

スクリーンショット 2018-08-23 2.28.06.png

Web UIで操作する

非常に簡潔なWebUIで操作することが可能です。

また、ここで見られるNotebookはZEPPELIN_HOME/notebookの中にjson形式で 保存されています。

InterpreterをMySQL用に作成する

Interpreterはデフォルトでは以下のような項目しかなくて、MySQLを直接すぐ使うことはできません。

スクリーンショット 2018-08-23 2.39.00.png

なのでInterpreterを追加します。 以下のコマンドでInterpreter設定画面を開いてください。

スクリーンショット 2018-08-23 2.37.37.png

そしてCreateを押します。 すると以下の画面が出るかと思います。

スクリーンショット 2018-08-23 2.40.22.png

そして以下の設定項目を打ち込みます。

スクリーンショット 2018-08-23 3.57.28.png

そしてSaveを押してください。

Notebookを作成してBindする

以下の項目で設定してください。

スクリーンショット 2018-08-23 2.47.44.png

すると空白のノートブックができます。

スクリーンショット 2018-08-23 2.48.18.png

そして、左上の歯車のマークでInterpreterが正しくバインディングされているか確認します。

スクリーンショット 2018-08-23 2.49.27.png

そして、次からコーディングに移ります。

コードを書いて可視化する

まず、冒頭に%INTERPRITER_NAMEとして書きます。

私だと%mysqlと書きます。すると、そのままSQL文を書くことができます。

必要な操作は以下のものです。

  • shift+enter: 実行する

たとえば

%mysql
show databases;

とすると以下のようになります。

スクリーンショット 2018-08-23 4.00.11.png

csvでアウトプットできたり、いろんな種類のグラフで可視化することができます。

ここでは、消費金額を表示しました。

スクリーンショット 2018-08-23 4.37.00.png

いろんなグラフで表示する

そのままではBar Graphなどは以下のように出力は何もでません。

スクリーンショット 2018-08-23 4.47.18.png

ここで設定タブのsettingsを押してkey, valueを設定すると見ることができます。

スクリーンショット 2018-08-23 4.49.01.png

以下のように可視化できると思います。

例として、円グラフを出力して見ます。

スクリーンショット 2018-08-23 4.50.12.png

参考文献