Apache MiNiFi on Windows

#はじめに
Apache NiFi projectのサブプロジェクトである[MiNiFi](https://nifi.apache.org/minifi/)の動作確認をしてみました。Hortonworksでも「[Apache MiNiFiによる IOT のためのエッジインテリジェンス](
https://jp.hortonworks.com/blog/edge-intelligence-iot-apache-minifi/)」として記事が書かれています。例によってHDFは自分のPCでは動きませんので個々のプロダクトを起動させます。
今回はMiNiFiをインストールしたPCからNiFiがインストールされているPCまでファイルの転送を実施してみます。
SFTPやSCPなどと同様にファイル転送をしますが、NiFiでファイル転送すると、ある程度履歴やファイル属性がGUIで確認できます。

#1. 前提
以下の環境で動作した内容を記述しています。
- Windows 10 Home (64bit) *Memory 8G
- JDK 1.8

また、NiFiのインストールについては、[こちら](https://qiita.com/tworks55/items/14a0354628d0a1dc4b80)を参照。

#2. MiNiFiの入手
[https://nifi.apache.org/minifi/download.html](https://nifi.apache.org/minifi/download.html)よりダウンロードします。
- MiNiFi (Java)
- MiNiFi Toolkit Binaries
それぞれのセクションよりJavaのバイナリ(zip版)をダウンロードします。

#3. Nifiの設定
MiNiFiがNifiにアクセスできるようにINPUTポートの設定をします。これによりSite-to-Siteのコミュニケーションが可能となります。

##3.1 Nifiのpropety設定と起動
[NiFiをインストールしたフォルダ]\conf\nifi.propertiesの以下の部分を修正します。
今回はSSL通信は使いませんのでsecureオプションはfalseでOKです。

```nifi.properties
# Site to Site properties
nifi.remote.input.host=localhost
nifi.remote.input.secure=false
nifi.remote.input.socket.port=10000
```
bin\run-nifi.batでNiFiを起動します。

##3.2 Input PortとFile出力の設定
起動したらNifi Canvas上でInput Portの設定をします。「From MiNiFi」という名前で設定してみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/b674647d-89d7-2118-ca39-23b8ece9b26b.png)

次にPutFile Processorを設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/2de29b62-0862-43fb-6e7b-a852292ac291.png)

ファイルの出力が失敗しても成功してもプロセスは終了させるので、SETTINGSのfailureとsuccessは両方チェックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/23e38964-29cd-4164-e4ea-c027c2e5cba5.png)

PROPERTIESのDirectory(出力先)を指定します。ここではc:\dev\NIFI\outputとします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/85ba595b-add6-90df-7b49-7bea9f17dbc8.png)


From MiNiFiのInput PortからPutFile Processorを接続します。以下のようになればOKです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/706a0ab8-88ce-5764-4015-038050740997.png)

##3.3 MiNiFi用設定
MiNiFi用の設定はNiFi本体で設定し、それをTemplateとしてExportしてMiNiFiで使用します。

まずはRemote Process Groupを作成します。URLにはLocalhostのURLではなく、PCの実IPでURLを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/39f111a5-fa9c-2461-04c0-12eb9d2aa888.png)


GetFile Processorを設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/714410d8-7b72-a93c-95d5-211b10554f2d.png)

PROPERTIESでInput Directoryを指定しますが、NiFiがインストールしてある環境に同じ構造のフォルダ構成がないと警告が出るので、c:\NIFI\inputを作成しておいてから設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/198fbe47-fa5f-4357-52b8-3cd086acb6ec.png)

GetFile ProcessorとRemote Process Groupを接続します。以下のようになればOKです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/a7851d7b-cb2a-f929-c82d-b30352998e01.png)

GetFile Processorとsuccess connectionとRemote Process Groupの３つを選択し、Create Templateをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/364cd92c-225d-fab5-4622-09482d39dd9f.png)


Template名を入力し、Templateを作成します。ここでは「MiNiFi Flow」としています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/b9b4ee89-04aa-f42f-0aef-407bcd2eee8d.png)

##3.4 Templateのダウンロードと変換
右上のメニューでTemplatsを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/d8e1007e-a2c5-6fe1-1455-43aaac6b83ee.png)

ダウンロードボタンをクリックし、TemplateをXMLファイルとしてダウンロードします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/aede5870-1c16-1af7-efd5-e1cd2591040c.png)

事前にダウンロードしてあったminifi-toolkit-0.3.0を好きな場所に展開し、ダウンロードしたTemplateをMiNiFi Toolkitのconfig.batでconfig.ymlファイルに変換します。

```
C:\dev\NIFI\minifi-toolkit-0.3.0>bin\config.bat transform MiNiFi_Flow.xml config.yml
No validation errors found in converted configuration.
```
作成したファイルはMiNiFiをインストールする別のPCにコピーします。

#4. MiNiFiのインストールと起動
##4.1 MiNiFiの展開
事前にダウンロードしてあったMiNiFiを動作させたいフォルダに展開します。

```
 C:\dev\MINIFI\minifi-0.3.0 のディレクトリ

2018/01/16  22:27    <DIR>          .
2018/01/16  22:27    <DIR>          ..
2018/01/16  22:27    <DIR>          bin
2018/01/16  22:27    <DIR>          conf
2018/01/16  22:27    <DIR>          content_repository
2018/01/01  18:03    <DIR>          docs
2018/01/16  22:27    <DIR>          flowfile_repository
2018/01/16  22:27    <DIR>          lib
2016/12/20  14:13            28,824 LICENSE
2018/01/16  22:27    <DIR>          logs
2017/11/27  12:08            35,959 NOTICE
2018/01/16  22:27    <DIR>          provenance_repository
2016/09/26  11:23             5,014 README
2018/01/01  22:43    <DIR>          run
2018/01/16  22:27    <DIR>          state
2018/01/16  22:27    <DIR>          work
               3 個のファイル              69,797 バイト
              13 個のディレクトリ  25,663,508,480 バイトの空き領域
```
##4.2 config.ymlのコピー
Templateから作成したconfig.ymlをconfフォルダにコピーします。

##4.3 MiNiFiの起動
bin\run-minifi.batを起動します。

```
C:\dev\MINIFI\minifi-0.3.0>bin\run-minifi.bat
```

#5. 動作テスト
##5.1 NiFiの処理を開始
NiFi本体のProcessorをStartします。何も選択せずにStartをクリックするとすべての処理が開始します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/614d4b82-e51f-ccea-e81e-8fc02385e437.png)

開始後は緑の三角が表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/c95e1b29-e789-799e-ce98-077bb5b0e79a.png)

##5.2 Inputファイルの準備
MiNiFiを起動させたPCのinputフォルダ(c:\NIFI\input)に適当なファイルを置いてみます。
すると自動的にNiFi本体のoutputフォルダ(c:\dev\NIFI\output)にファイルが移動されます。

##5.3 ファイル転送履歴などの確認
Input PortやProcessorを右クリックし、View Data Provinceで転送履歴を確認することができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/7a244bc1-be05-291b-e376-919c46023008.png)

以下のようにファイルの転送時間や属性が確認できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/9812c236-81a4-2ce8-8f85-00f14ce7ad40.png)

また、転送されたファイルの中身を参照することもでき、テキストファイル、jpegファイルそれぞれに合わせた表示形式でファイルの確認ができました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/5437e2cd-b48a-4d83-d00b-ddc35ccda370.png)


#参考URL
https://community.hortonworks.com/articles/56341/getting-started-with-minifi.html