LoginSignup
33
36

More than 5 years have passed since last update.

Apache NiFiについて調べてみた

Last updated at Posted at 2017-10-08

この記事はなに?

Apache NiFiは,システム間のデータフローを管理するために作られたデータフローオーケストレーションツールです.

GUI(Web画面)によって,データフローの設定,制御,監視ができることが大きな特徴です.

Project page: https://nifi.apache.org/index.html
Github: https://github.com/apache/nifi

現在,NiFiを使うプロジェクトにアサインされ,調査をしており,調べたことを少しづつメモしておこうと思います.

環境

  • Mac OS X 10.11.6
  • Apache NiFi 1.4.0
  • Java version 1.8.0_92

NiFiのインストール

上記instructionに従い,Homebrewを使ってインストールする.

$ brew install nifi

とりあえずステータスチェックをしてみる.

$ nifi status

NiFi home: /usr/local/Cellar/nifi/1.4.0/libexec

Bootstrap Config File: /usr/local/Cellar/nifi/1.4.0/libexec/conf/bootstrap.conf

2017-09-30 21:48:15,792 INFO [main] org.apache.nifi.bootstrap.Command Apache NiFi is not running

ここでJava homeの値がおかしい場合は,先に環境変数等で適切に記述する必要がある.
NiFi homeが,NiFiが用いるルートディレクトリ.

NiFiを起動してみる.

$ nifi start

Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home
NiFi home: /usr/local/Cellar/nifi/1.4.0/libexec

Bootstrap Config File: /usr/local/Cellar/nifi/1.4.0/libexec/conf/bootstrap.conf

$ nifi status

Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home
NiFi home: /usr/local/Cellar/nifi/1.4.0/libexec

Bootstrap Config File: /usr/local/Cellar/nifi/1.4.0/libexec/conf/bootstrap.conf

2017-09-30 21:59:25,018 INFO [main] org.apache.nifi.bootstrap.Command Apache NiFi is currently running, listening to Bootstrap on port 59714, PID=13895

デフォルトでは,localhostの8080番がNiFiのWeb UIに割り当てられるので,http://localhost:8080/nifiにブラウザからアクセスすることで,起動していることが確認できる.

Kobito.ESORtv.png

用語

最低限これぐらいは知っておくと良さそう.

  • FlowFile
    • NiFiが取り扱うデータの単位.AttributesContentからなる.
    • Attirbutes: 個々のFlowFileが持つ,key-valueベースのメタ情報.
    • Content: 扱うデータの本体.
  • Processor
    • 「FlowFileにどんな処理を施すか」を表す.
    • データフローを記述したグラフ(DAG)におけるノードに相当する.
    • NiFiに組み込まれているものに加え,自分で実装したものを新たに組み込むことも可能.
  • Relationship
    • 「Processorが行った処理に応じて,どのProcessorにどのFlowFileを届けるか」を表す.
    • データフローを記述したグラフにおけるエッジの属性に相当する.
    • 各Processorごとにあらかじめ定義されている.

触ってみる

とりあえず動かしてみたいだけなら,

Get Started: https://nifi.apache.org/docs/nifi-docs/html/getting-started.html
Hortonworks社による日本語チュートリアル: https://github.com/ijokarumawak/hdf-tutorials-ja/wiki/Ropes-of-Apache-NiFi%3A-Tutorial-1

あたりが参考になると思われる.

NiFiでデータフローを実現するための大きな流れとして,

  1. 目的に応じたProcessorを探し/実装し,キャンバス上に追加する
  2. Processor同士を結ぶ(各エッジについて,Relationshipを選択する)
  3. Processorを設定する(多くのProcessorにはPropertyの設定が必要)
  4. Processorを起動する

をする必要がある.

試しに,「各行がJSONになっているファイルを読み込んで,これを行単位で分割し,これをHTTPのPOSTパラメータとして送る」データフローを書いてみることとする.

Processorの配置

今回使うProcessorは,

  1. ListFile: ディレクトリを指定することで,そのディレクトリ中のファイルを検索する
  2. FetchFile: 指定したファイルの内容を取得する
  3. SplitText: ファイルを分割する
  4. InvokeHTTP: HTTPアクセスを行う

の4つ.

nifi1.png

上のボタンを押してキャンバス上にドラッグ&ドロップすると,

Kobito.x6pAlz.png

上のように,追加したいProcessorを選択する画面が現れる.

Kobito.gS6hdQ.png

ここで,ListFileを選んで,ADDを押すと,

Kobito.bIIoU9.png

Processorが配置される.

同様に,他のProcessorについても配置する.

Kobito.4ACm7G.png

Processorを結ぶ

Kobito.uY6sos.png

のような矢印が出ている状態でProcessor同士をドラッグ&ドロップすると,Processor同士を線で結ぶことができる.

Kobito.Uuypxp.png

For Relationshipの欄には,どのようなRelationshipでProcessorを結ぶかを指定する.
ここでは,successを指定する.

Kobito.L1ONFy.png

successのRelationshipで結べたことが確認できる.

同様に,他のProcessorも結ぶ.

Kobito.uiAgS2.png

Processorを設定する

このままでは,どのProcessorにも設定値がないので動作しない.

Processorを右クリックし,Configureをクリックすることで,Processorの設定を行うことができる.

Kobito.eGVUEF.png

ここでは,PROPERTIESタブを選択し,Input Directoryに,ファイルを検索したいディレクトリのパスを入力する.

Kobito.469RXD.png

Kobito.2dsZwj.png

先ほどは,ListFileのProcessorに黄色い「注意」のマークがついていたが,これが,赤い「停止」のマークに変わっていることがわかる.
これで,このProcessorについては,起動準備ができたことになる.

「注意」のマークにマウスカーソルを合わせると,何が起動条件として満たされていないのかが表示されるので,参考にするとよい.

Kobito.rGVoj8.png

基本的に,すべての入力必須なPropertyは入力されていなければならず,また,Relationshipについては,他のProcessorと結んであるか,または「どことも結ばない」ことを明示する必要が有ることに注意.
「どことも結ばない」ことを明示する場合は,SETTINGSタブのAutomatically Terminate Relationshipから選択する.

Kobito.lFO8Ai.png

同様に,他のProcessorについても設定を行う.

Kobito.GOXGWd.png

(今回,異常系については省略しているが,実際のデータフローでは,失敗時の処理も記述すべきである.)

Processorを起動する

Kobito.Bqzk1Y.png

上のように,起動したいProcessorを選択した上で,「再生」ボタンを押すことで,Processorを起動できる.

Kobito.T4fwaa.png

実際のデータの流れを追いたい時は,Data Provenanceを用いるとよい.

例えば,SplitTextの処理を追いたい場合は,

Kobito.P4tgWR.png

のように,SplitTextのメニューからData Provenanceを選択する.

Kobito.Un9hww.png

上の画面で,SplitTextを通過したデータの一覧を見ることができる.

実際のデータの内容を確認したい時は,一番左の「i」ボタンを押し,CONTENTタブから,VIEWボタンを押す.
Processorへの入力,出力両方のデータが見られる.

Kobito.IijGnU.png

ちなみに,InvokeHTTPの方の入力データを見てみると,ちゃんと行単位でデータがsplitされていることが確認できる.

Kobito.PPbL4x.png

Kobito.o9jNOk.png

33
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
36