「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Apache NiFi]]
--Apache NiFiファースト・ステップ
--[[Apache NiFiセカンド・ステップ]]

*目次 [#r0303ee6]
#contents

*概要 [#r7ffacea]
-ファーストステップ @ Windows。
-基本的なことは、[[コチラ>Apache NiFi]]で確認して下さい。

*インストール [#gc23e52c]

**ダウンロードする。 [#vebcb21d]
-以下からダウンロード(Windowsならzipファイル形式のもの)

>
-Apache NiFi Downloads~
https://nifi.apache.org/download.html

-最新の、nifi-toolkitではない方をダウンロード。~
(nifi-toolkitは多分色々なツールが同梱されてる)

-ダウンロードしたらMD5 or SHA1などのハッシュ値をチェックする。~
(HTTPSではないので、バイナリがオカシクなることが有り得る。)
 certutil -hashfile ...nifi-1.6.0-bin.zip MD5
 certutil -hashfile ...nifi-1.6.0-bin.zip SHA1

**インストールする。 [#k4514376]
任意のパスに解凍すればイイらしい。とりあえず、Cドラ直下に解凍。~
([[JMeterっぽい。ZIP64の可能性があるので解凍ツールに注意する。>https://techinfoofmicrosofttech.osscons.jp/index.php?Apache%20Jmeter]])。

**起動する。 [#q6aee609]
binフォルダ以下の「run-nifi.bat」バッチを管理者実行。~
(これもまたJMeterっぽい。設定ファイルなどは取り合えずスルー)。

-必要に応じて、[[Java のランタイム (JRE)のインストールや、パス設定>https://techinfoofmicrosofttech.osscons.jp/index.php?Jmeter%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB]]を行う。
-2018年9月より[[Oracke Javaは有償>Java有償化について調べてみた。]]となったため、~
同等の機能を持つAdopt Open JDKをインストール

--[[Java8のLTS版で、hotspotを選択する。>Java有償化について調べてみた。#f6e5c5ab]]

-必要に応じて、confフォルダ以下のnifi.propertiesでポート番号を変更する。~
(私の環境で、Docker for windowsが8080を使用していてUnauthorizedでハマった。~
故に、nifi.propertiesのnifi.web.http.portで、ポート番号を8081に変更。)

*最も簡単な利用 [#pe0b11b6]

**画面にアクセスする。 [#xe0165b2]
-既定値 : http://localhost:8080/nifi/
-変更後 : http://localhost:8081/nifi/

※ 改めてやってみると、「run-nifi.bat」実行後のロードが長い(2-3分?)。

#ref(1.png,left,nowrap,手順1,60%)

以下の辺りを理解しつつ、次へ進む。

-Getting Started with Apache NiFi > I Started NiFi. Now What?~
https://nifi.apache.org/docs/nifi-docs/html/getting-started.html#i-started-nifi-now-what

**Processorを追加する。 [#mb965021]
-Processorの追加により、データフローを作成を開始する。
-Processorについては、[[コチラ>Apache NiFi#h3f2273c]]を参照。

***追加する。 [#p2ce2a03]
-ヘッダのComponentToolBarのProcessorアイコンを方眼紙風のキャンバスにD&D。
-追加するProcessorを選択できるダイアログが表示される。
-Processorを選択して[Add]ボタンを押下(必要に応じて[Filter]可能)

-ここでは、ファースト・ステップにお似合いのProcessorを追加する。
--[GetFile Processor]
--[LogAttributes Processor]

***設定する。 [#t385944e]
-Processorをダブルクリック(若しくは、右クリック -> configure)で設定を行う。

-[GetFile Processor]の設定を、[Property]タブから行う。
#ref(2-1.png,left,nowrap,手順2-1,60%)

--ポイント
---太字のプロパティは必須のプロパティ
---必須プロパティが構成されるまで、Processorは開始できない。 

--設定値
---Input Directory : ./data-in

-[LogAttributes Processor]の設定を、[Settings]タブから行う。
#ref(2-2.png,left,nowrap,手順2-2,60%)

--ポイント~
末端のProcessorになるので、FlowFileの処理が完了した場合、~
データを削除することを考慮する必要がある。

--設定値
---Automatically Terminate Relationships : checked to [success]~

***使い方を確認する。 [#lc1be49e]
-問題がある場合は、warningマークが表示される。~
ここでは、接続が無いため、warningマークが表示される。

-また、Processorを右クリックし、~
[View usage]を選択すると、Processorのヘルプが表示される。

-次に[[Connectionで接続をする>#zfbd0c39]]。

**Connectionで接続する。 [#zfbd0c39]

***接続する [#q082df56]
Connectionで接続する場合、以下のように操作する。
#ref(3.png,left,nowrap,手順3,60%)

***設定する [#oae98dde]
するとダイアログが表示されるので

-[Settings]タブから設定する。

--Connectionに名前を付ける
[Name] : hogehoge

--Relationshipの設定 : 既定値

--Dataの有効期限とQueueの設定
---[FlowFile Expiration] : 既定値
---[Back Pressure Object Threshold] : 既定値
---[Back Pressure Data Size Threshold] : 既定値

--キューの優先順位の設定~
1つ以上のPrioritizerを設定し、~
1つ目のPrioritizerで優先順位が同じだった場合、~
2つ目のPrioritizerで優先順位が再評価される。
---[Selected Prioritizers] :~
FirstInFirstOutPrioritizer~
OldestFlowFileFirstPrioritizer

-[Detail]タブ
--Relationshipの設定 : 既定値

#ref(4.png,left,nowrap,手順4,60%)

-ここまでの設定で、Processorは停止状態になる。
#ref(5.png,left,nowrap,手順5,60%)

**データフローを実行する。 [#df3ecf76]

***実行 [#h71f1f41]
-ぞれぞれ、Processorを選択してOperatorの再生ボタンを押下する。
#ref(6.png,left,nowrap,手順6,60%)

-すると、以下の状態になり、データフローを実行できる。
#ref(7.png,left,nowrap,手順7,60%)

-この状態で、data-inフォルダにファイルを放り込むと確実に処理されていることを確認できるのだが、~
LogAttribute 1.6.0 の仕様が No description provided. のため、最後まで流れたのかどうかを全く確認できない。

***修正 [#kc452241]
そこで急遽、PutFileというProcessorを追加・接続して、以下のように設定して動かしてみる。

-PutFile Processor
--Directory : ./data-out
--[Automatically Terminate Relationships] : checked to [failure] and [success]

-Connection
--[Name] : hogehoge

#ref(8.png,left,nowrap,手順8,60%)

***確認 [#e75c8ad1]
すると、data-inフォルダに放り込んだファイルがdata-outフォルダに出力されることを確認できる。

※ 後日談:[[LogAttributeについての仕様を発見した。>Apache NiFi - Processor#g9522ed5]]

*分岐、分割・集約辺りの利用 [#wdc4e229]

**分割 [#ff8a41e1]
[[前述の、GetFile - PutFile の例>#kc452241]]にSplitText Processorを追加して、~
以下のようなデータフローを定義して分割を評価できる。

***データフロー [#e57d94fe]
#ref(9.png,left,nowrap,手順9,60%)

※ なお、上記のようにConnectionを曲げたい場合は、矢印上でダブル・クリックする。

***ポイント [#kef4f25b]
-Processor
--SplitText~
Line Split Count : 2

--PutFile
---PutFile(Connection 2-1 に接続)~
Directory : ./data-out1
---PutFile(Connection 2-2 に接続)~
Directory : ./data-out2

-Connection
--[Name] : 2-1~
[Relationship] : original, failure
--[Name] : 2-2~
[Relationship] : splits

***動作確認 [#s921e592]
-Processorを選択していない状態でOperatorの再生ボタンを押下する。

-data-inフォルダに放り込んだファイルがdata-out1, 2フォルダに出力されることを確認できる。

--data-out1 : data-inに放り込んだファイル

--data-out2 : SplitTextで抽出した先頭の2行のテキストを含むファイル

**分割・集約 [#g7a357d1]
SplitContent、MergeContent Processorを追加、~
以下のようなデータフローを定義して分割・集約を評価できる。

***データフロー [#f15981c1]
#ref(10.png,left,nowrap,手順10,60%)

***ポイント [#s47620ca]
-Processor

--GetFile~
Directory : ./data-in

--PutFile
---PutFile(Connection 3-1 に接続)~
Directory : ./data-temp
---PutFile(Connection 3-2 に接続)~
Directory : ./data-out

--分割・集約

---SplitContent([;]区切りで分割)~
Byte Sequence : 3B ※ [;]を意味する。~
Automatically Terminate Relationships : original

---UpdateAttribute(ファイル名変更)~
filename : ${UUID()}  ※ [+]ボタンでプロパティ追加する。

---MergeContent(統合) : 既定値

-Connection
--[Name] : 2-1~
[Relationship] : splits
--[Name] : 2-2~
[Relationship] : splits
--[Name] : 3-1~
[Relationship] : success
--[Name] : 3-2~
[Relationship] : failure, merged, original

***動作確認 [#recb6dd0]
-Processorを選択していない状態でOperatorの再生ボタンを押下する。

-data-inフォルダに放り込んだファイルがdata-temp、data-outフォルダに出力されることを確認できる。

--data-temp
---Byte Sequenceで分割されたファイル
---ファイル名は、UpdateAttributeにより、UUIDに変更される。

--data-out
---分割後、再び集約されたファイル。
---Byte Sequenceで分割後、マージされるため、Byte Sequenceが削除されている。

*変換・処理辺りの利用 [#k205f338]
[[前述の、GetFile - PutFile の例>#kc452241]]にCompressContent Processorを追加して、~
以下のようなデータフローを定義して変換・処理を評価できる。

**データフロー [#ra3c7765]
#ref(11.png,left,nowrap,手順11,60%)

**ポイント [#v50a9f46]

***Processor [#k53ae6ec]

-GetFile~
Directory : ./data-in

-PutFile
--PutFile(Connection 2 に接続)~
Directory : ./data-temp
--PutFile(Connection 4 に接続)~
Directory : ./data-out

-変換・処理

--CompressContent
---Mode : compress
---Compression Format : gzip

--CompressContent
---Mode : decompress
---Compression Format : gzip

***Connection [#e5a2dda6]
-[Name] : 1~
[Relationship] : success
-[Name] : 2~
[Relationship] : failure, success
-[Name] : 3~
[Relationship] : failure, success
-[Name] : 4~
[Relationship] : failure, success

**動作確認 [#lea084e7]
-Processorを選択していない状態でOperatorの再生ボタンを押下する。

-data-inフォルダに放り込んだファイルがdata-temp、data-outフォルダに出力されることを確認できる。

--data-temp~
CompressContent(compress)で圧縮されたデータ・ファイル

--data-out~
CompressContent(decompress)で解凍されたデータ・ファイル

*その他、基本操作 [#edd7e123]

**Processor・Connectionの配置 [#a629c351]
ヘッダのComponentToolBarのProcessor・Connectionアイコンを方眼紙風のキャンバスにD&D。

**Connection [#zb806696]

***曲げたい場合 [#xc996b18]
矢印上でダブル・クリックする。

***Queueのクリア [#i211020d]
-Terminateしたフローファイルがキューに詰まることがある。
-この場合、Connectionを右クリックして、Empty Queueする。

**Template [#yfb3fd95]

***セーブ・ロード [#zd947de2]
-セーブ
--OperatorからCreate Templateする。

--ファイルに出力する場合、
---右上メニューからTemplateを選択し、
---Create TemplateをDownloadする。

-ロード
--ファイルから入力する場合、OperatorからUpload Templateする。
--ヘッダのComponentToolBarのTemplateアイコンを方眼紙風のキャンバスにD&D。

***ProcessGroupに格納 [#j7e1785d]
テンプレートを保存する前に、以下の手順を踏む。
-ヘッダのComponentToolBarのProcessGroupアイコンを方眼紙風のキャンバスにD&D。
-ProcessGroupに名称を付与し、ProcessGroup上に他のProcessor+ConnectionをD&D。

これにより、データフローがProcessGroupとして纏まる。

**サーバーの実行 [#e9288c7d]
・・・

*[[セカンド・ステップ>Apache NiFiセカンド・ステップ]] [#jc556256]

*参考 [#rdf45f1f]

**[[参考資料>Apache NiFi#ce179366]] [#e99bd3ab]

**[[Apache NiFi - Processor]] [#xa8a227f]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS