MacでApache NiFi 使ってみた備忘録— 基礎編

GO2
Aug 11, 2023

--

前回に続き,NiFiの学習を進めたので,備忘録として基礎的なことのまとめを書いていきたいと思います.

※NiFi環境の立ち上げについては前回の記事を参考にしてください!

Terminal上でファイルを作成したり,フォルダーの移動をしているので,コマンドのまとめを先に書いておきます〜

cd <ディレクトリ名> #ディレクトリ名の場所に移動する
cd ../ #一個上の階層に移動する
mkdir #ディレクトリを作成する
echo "<内容>" > <ファイル名.拡張子> #ファイルを作成する e.g. echo "hello world" > hello-wolrd.txt
cat <ファイル名.拡張子> #ファイル内容を表示する
ls #ディレクトリ内に格納されているファイルを表示する

まずは,NiFiを使用するのに適しているケースとを考えると…

Apache NiFiが得意なこと

a. システム間の確実でセキュアなデータ転送
b. ソースから分析プラットフォームへのデータ配信
c. データのエンリッチメントと準備
d. フォーマット間の変換
e. 抽出/解析
f. ルーティングの決定

Apache NiFiを使用すべきでないケース

a. 分散計算
b. 複雑なイベント処理
c. 結合、ローリングウィンドウ、集約操作

また,NiFiを使用する際のメインのコンポーネントとして以下の3つがあります.(簡略した説明にしています)

  1. FlowFile: データそのもの
  2. Processor: 一連の変換とルールをFlowFilesに適用し、新しいFlowFilesを生成する
  3. Connector: processorを繋げ,「優先順位づけ」や「オーバーフロー回避のための定義」を設定するもの
イメージ図

それでは,実際にNiFiを使って簡単な処理を実現してみましょう.

今回は「特定のフォルダーに格納されているファイルを違うフォルダへ移動させる」という処理を行っていきましょう.

手順

まずは,画面右上に表示されているprocessorアイコンをドラッグ&ドロップで一個作成しましょう.

そうしますと,スクショの画面が出てきますので,検索ボックスにて「Getfile」と検索し,「ADD」をクリック.

画面上にprocessorが出てくるかと思いますので,processorを右クリックし,「Configure」をクリック.

Configure processorが開きましたら,「PROPERTIES」タブに行きまして,「Input Directory」を設定します.今回は,ダウンロードしたNiFiファイル内の「source」というフォルダを指定したいと思います.

※ちなみに,「PROPERTIES」の「Property」で太字になっている項目は必須項目となっています.

ここではまだnifiのフォルダ内に「source」というファイルはないと思いますので,Terminal上で作成していきます.

cd nifi-1.23.0
mkdir source

これで「source」フォルダが作成されましたので,処理の次ステップのファイルを移動させるprocessorと移動先フォルダの作成をします.

先ほどと同様にprocessorをドラッグ&ドロップします.

ドラッグ後は先ほどと同様に「何の処理をするprocessorか?」を聞かれますので,検索ボックスにて「putfile」を選択し,「ADD」をクリック.

次も「getfile」時と同様に,processorを右クリックして「configure」→「PROPERTIES」タブにてディレクトリを設定します.

そして,Terminalにて「target」フォルダを「nifi」フォルダ内に作っていきます.

mkdir target

次に,作成した2つのprocessorを繋ぐためにconnectorを使用します.そのためには,マウスカーソルを「getfile」processorにホーバーすると,矢印が現れますので,その矢印をクリックしたまま「putfile」processor上でドロップします.

そうしますと,「Create Connection」というウィンドウが現れますので,内容は変更しないまま「ADD」をクリック.

以下の状態になっていれば,OKです.

では,実際に処理を動かしてみたいと思います.そのためには,「source」フォルダ内にファイルをいくつか作ってみる必要がありますので,Terminalへ戻ります.以下のコマンドでファイルを作成してみましょう.

cd ../ #先ほどのままですとtargetディレクトリにいますので,一旦nifi階層に戻ります
cd source #sourceディレクトリへ移動します
echo "hello world" > hello-world.txt #hello-worldというテキストファイルを作成します.

上記のコマンドでファイルが完成しましたので,処理を動かしてみます.そのためには,processorを右クリックし,「start」をクリック.

そうしますと,以下のスクショのように変化があるかと思います.

しかし,「putfile」にはまだWarningサインが出ていて,処理が完了していないように思えます.実際,Terminalにて「target」フォルダには「hello-world.txt」はありません.

※ちなみに,今hello-world.txtはqueueされているので,「source」ファイルにも存在していません.

話は戻りまして,なぜ「target」ディレクトリにファイルは移動していなく,「putfiile」processorにはWarningサインが表示されているのでしょうか?こんな時はWarningサインにカーソルをホバーさせてエラー内容を確認してみましょう.

と書いてありましたので,「auto-terminate」するように設定を変えてみましょう.なので,「putfile」processorを右クリックし,「configure」を開きます.

今回は「RELATIONSHIPS」タブに行きまして,「failure/success」ともに「terminate」にチェックを入れます.そうすると,以下のスクショの通りWarningサインは消えます.なので,処理を「start」させましょう.

「Start」すると,以下のスクショの通りに内容が変わるかと思います.

※もし変わらなければ,NiFi内のprocessor以外の場所にて右クリックをして「Refresh」してみてください.

処理が終わっているようなので,実際にTerminalでも確認します.

入ってますので,処理が完了していますね!

以上,今回はものすごく簡単な処理でしたが,NiFiの一連の処理を実践してみました!

少しでも参考になればと〜!

--

--

GO2

Hi I am GO2, living in Japan. Interests: Data analytics (People Analytics). GO2です!元エンジニア採用担当者がTechやPAについて勉強した内容などをつらつらと書いていきます〜