このブログはHortonworks Advent Calendar 2016の1日目のエントリーです。
Hortonworksの展示ブースなどで見かけたかもしれませんが、TwitterからのデータをNiFiで収集し、Apache Solr + Bananaで可視化するデモの作成方法について解説します。環境としては、VMware、Virtual Boxなどでも作れますが、今回はMicrosoft Azure上に作りたいと思います。
実は、このネタは英語のチュートリアルのAnalyzing Social Media and Customer Sentiment With Apache NiFi and HDP Searchが元ネタです。
Azure上で、Hortonworks Data Platform (HDP)をデプロイ
Hadoop、Sparkを、Azure上のHortonworks Data Platformで試してみようを参照ください。
Hortonworks DataFlow (HDF)の設定
- ローカルのPCに、こちらより、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が表示される
![2016-12-01 23.49.35.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F42406%2F8b47c8fb-436a-f405-27e4-304a458825c2.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=4d2d8107bba6909bf884aa5625f92cc2)
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が表示される
![2016-12-02 0.26.28.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F42406%2F3e714b3e-9a30-7a1a-cbd4-fd2d3fc9e982.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d7d86d09572cf2a3812dcb52b28cd131)
Twitter Appsを作成する
- https://apps.twitter.com/ にアクセス
- Create New Appをクリックし、下記のように作成する
![2016-12-02 0.13.22.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F42406%2Ffdde8a4b-1bcb-9749-80dd-2bb139ec42ee.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b547d86b6becd1ef9df9281bbe690248)
- Permissionsタブで下記のように設定し、Update Settingsをクリック
![2016-12-02 0.14.03.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F42406%2F20b43e50-98a9-f167-6c53-43521a428047.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c89c840647fd3132eed376c4e5c4b567)
- Keys and Access Tokensで下記の値をコピーしておく
- Consumer Key (API Key)
- Consumer Secret (API Secret)
- Access Token
- Access Token Secet
NiFiでフローを設定
-
デモ用のテンプレートをこちらからダウンロード
-
赤枠で囲ったボタンをクリックし、先ほどダウンロードしたテンプレートをインポート
![2016-12-01 23.49.39.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F42406%2Fa6834e5c-42d3-f687-d85e-ac268c4bc95e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=bd54b6f8cab9aec45ec62a950459245f)
- 赤枠で囲ったボタンをキャンパスにドラッグアンドドロップ
![2016-12-01 23.50.08.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F42406%2F75f1b3c2-9a6f-0026-9df6-2da922cd2ac0.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=8ac1d43081b6bd8f612125fd63300d4e)
- Twitter Flowを選択
![2016-12-01 23.50.12.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F42406%2F61dcf0ce-5128-e111-a8e9-7e1569593bea.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d4a718b40cc0e1d2b6db542969e0eec6)
- Twitter Flowが表示されるので、Grab Garden Hoseと書かれた箱(NiFiではプロセッサーと呼ぶ)を右クリックし、Configureをクリック
![2016-12-01 23.50.46.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F42406%2Fdf65ad20-e93f-cfdc-53e3-a4fbc0b731fb.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6b9e55bd1f16268d034670a3abea1e3c)
- Propertiesタブで、先ほどメモしたConsumer Key, Consumer Secret, Access Token, Access Token Secretを設定し、Terms to Filter Onに、Twitterでモニターするキーワードを設定
![2016-12-01 23.55.12.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F42406%2Fb97a69e6-3869-e928-6f43-58448d67210a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=fb8311acebc56210060eabfea64426fc)
Solrの可視化ツールBananaで確認
- http://ip-address:8983/solr/banana/index.html#/dashboard にアクセスし、正しく設定したキーワードが可視化されているか確認
![2016-12-01 23.58.40.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F42406%2Fd807e569-e398-c954-38c2-11597bc10918.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=03406545148caafafca107533ccdb266)
以上、NiFiでTwitterからデータを収集し、そのデータフローをコントロールし、Solrにデータを格納し、Bananaで可視化するといったデモ作成手順について説明しました。英語のチュートリアルには続きがあるので、次回また、整理して日本語にしてみたいと思います。