TwitterからNiFiでデータを収集し、データフローをコントロールし、Solr + Bananaで可視化させてみよう

このブログは[Hortonworks Advent Calendar 2016](http://qiita.com/advent-calendar/2016/hortonworks)の1日目のエントリーです。

Hortonworksの展示ブースなどで見かけたかもしれませんが、TwitterからのデータをNiFiで収集し、Apache Solr + Bananaで可視化するデモの作成方法について解説します。環境としては、VMware、Virtual Boxなどでも作れますが、今回はMicrosoft Azure上に作りたいと思います。

実は、このネタは英語のチュートリアルの[Analyzing Social Media and Customer Sentiment With Apache NiFi and HDP Search](https://github.com/hortonworks/data-tutorials/blob/master/tutorials/hdp/analyzing-social-media-and-customer-sentiment-with-apache-nifi-and-hdp-search/tutorial.md
)が元ネタです。

---

## Azure上で、Hortonworks Data Platform (HDP)をデプロイ
[Hadoop、Sparkを、Azure上のHortonworks Data Platformで試してみよう](http://qiita.com/kkitase/items/1d2e4662c2e8c9b0fd59)を参照ください。

## Hortonworks DataFlow (HDF)の設定
+ ローカルのPCに、[こちらより](http://hortonworks.com/downloads/#sandbox)、NiFi onlyのDownload tar.gzをクリックし、HDF-2.x.x.x-xxx.tar.gzダウンロード
+ Azure上に展開したSandboxにダウンロードしておいたHDFをアップロード
 
```
kkitase$ scp ~/Downloads/HDF-2.0.0.0-579.tar.gz kkitase@ip-address:/home/kkitase
```

+ Azure上に展開したSandboxにログインして、設定を行う

```
kkitase$ ssh <username>@<ip address>
[kkitase@sandbox ~]$ sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
[kkitase@sandbox ~]$ mkdir hdf
[kkitase@sandbox ~]$ mv HDF-2.0.0.0-579.tar.gz hdf
[kkitase@sandbox ~]$ cd hdf
[kkitase@sandbox hdf]$ tar -xvf HDF-2.0.0.0-579.tar.gz 
[kkitase@sandbox hdf]$ vi HDF-2.0.0.0/nifi/conf/nifi.properties 
nifi.web.http.port=8080
↓変更
nifi.web.http.port=9090
[kkitase@sandbox hdf]$ ./HDF-2.0.0.0/nifi/bin/nifi.sh start
```
+ http://ip-address:9090/nifi にアクセスするとNiFiのUIが表示される
<img width="1280" alt=" 2016-12-01 23.49.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/42406/8b47c8fb-436a-f405-27e4-304a458825c2.png">

## Solrの設定

```
[kkitase@sandbox ~]$ sudo chown -R solr:solr /opt/lucidworks-hdpsearch/solr
[kkitase@sandbox ~]$ sudo su solr
[solr@sandbox kkitase]$ cp -r /opt/lucidworks-hdpsearch/solr/server/solr/configsets/data_driven_schema_configs /opt/lucidworks-hdpsearch/solr/server/solr/configsets/tweet_configs
[solr@sandbox kkitase]$ vi /opt/lucidworks-hdpsearch/solr/server/solr/configsets/tweet_configs/conf/solrconfig.xml

<processor class="solr.ParseLongFieldUpdateProcessorFactory"/>
  <processor class="solr.ParseDateFieldUpdateProcessorFactory">
    <arr name="format">
      <str>EEE MMM d HH:mm:ss Z yyyy</str>  ★この行を追加
      <str>yyyy-MM-dd'T'HH:mm:ss.SSSZ</str>
      <str>yyyy-MM-dd'T'HH:mm:ss,SSSZ</str>
      <str>yyyy-MM-dd'T'HH:mm:ss.SSS</str>
      <str>yyyy-MM-dd'T'HH:mm:ss,SSS</str>
      <str>yyyy-MM-dd'T'HH:mm:ssZ</str>
      </arr>
    </processor>
</processor>

[solr@sandbox kkitase]$ cd /opt/lucidworks-hdpsearch/solr/server/solr-webapp/webapp/banana/app/dashboards/
[solr@sandbox dashboards]$ mv default.json default.json.orig
[solr@sandbox dashboards]$ wget https://raw.githubusercontent.com/abajwa-hw/ambari-nifi-service/master/demofiles/default.json
[solr@sandbox dashboards]$ export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk.x86_64
[solr@sandbox dashboards]$ /opt/lucidworks-hdpsearch/solr/bin/solr start -c -z localhost:2181
[solr@sandbox dashboards]$ /opt/lucidworks-hdpsearch/solr/bin/solr create -c tweets -d tweet_configs -s 1 -rf 1
[solr@sandbox dashboards]$ exit
[kkitase@sandbox ~]$ sudo su -
[root@sandbox ~]# yum install -y ntp
[root@sandbox ~]# service ntpd stop
[root@sandbox ~]# ntpdate pool.ntp.org
[root@sandbox ~]# service ntpd start
 ```
+ http://ip-address:8983/solr/ にアクセスするとSolrのUIが表示される
<img width="1280" alt=" 2016-12-02 0.26.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/42406/3e714b3e-9a30-7a1a-cbd4-fd2d3fc9e982.png">

## Twitter Appsを作成する 
+ https://apps.twitter.com/ にアクセス
+ Create New Appをクリックし、下記のように作成する
<img width="1280" alt=" 2016-12-02 0.13.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/42406/fdde8a4b-1bcb-9749-80dd-2bb139ec42ee.png">

+ Permissionsタブで下記のように設定し、Update Settingsをクリック
<img width="1280" alt=" 2016-12-02 0.14.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/42406/20b43e50-98a9-f167-6c53-43521a428047.png">

+ Keys and Access Tokensで下記の値をコピーしておく
 - Consumer Key (API Key)
 - Consumer Secret (API Secret)
 - Access Token
 - Access Token Secet


## NiFiでフローを設定
+ デモ用のテンプレートを[こちらからダウンロード](https://raw.githubusercontent.com/hortonworks/tutorials/hdp-2.3/assets/nifi-sentiment-analytics/assets/Twitter_Flow.xml)

+ 赤枠で囲ったボタンをクリックし、先ほどダウンロードしたテンプレートをインポート
<img width="1280" alt=" 2016-12-01 23.49.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/42406/a6834e5c-42d3-f687-d85e-ac268c4bc95e.png">

+ 赤枠で囲ったボタンをキャンパスにドラッグアンドドロップ
<img width="1280" alt=" 2016-12-01 23.50.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/42406/75f1b3c2-9a6f-0026-9df6-2da922cd2ac0.png">

+ Twitter Flowを選択
<img width="1280" alt=" 2016-12-01 23.50.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/42406/61dcf0ce-5128-e111-a8e9-7e1569593bea.png">

+ Twitter Flowが表示されるので、Grab Garden Hoseと書かれた箱（NiFiではプロセッサーと呼ぶ）を右クリックし、Configureをクリック
<img width="1280" alt=" 2016-12-01 23.50.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/42406/df65ad20-e93f-cfdc-53e3-a4fbc0b731fb.png">

+ Propertiesタブで、先ほどメモしたConsumer Key, Consumer Secret, Access Token, Access Token Secretを設定し、Terms to Filter Onに、Twitterでモニターするキーワードを設定
<img width="1280" alt=" 2016-12-01 23.55.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/42406/b97a69e6-3869-e928-6f43-58448d67210a.png">

## Solrの可視化ツールBananaで確認
+ http://ip-address:8983/solr/banana/index.html#/dashboard にアクセスし、正しく設定したキーワードが可視化されているか確認
<img width="1280" alt=" 2016-12-01 23.58.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/42406/d807e569-e398-c954-38c2-11597bc10918.png">

---
以上、NiFiでTwitterからデータを収集し、そのデータフローをコントロールし、Solrにデータを格納し、Bananaで可視化するといったデモ作成手順について説明しました。英語のチュートリアルには続きがあるので、次回また、整理して日本語にしてみたいと思います。