データの流れを制御するツール『Apache Nifi』をCentOS 7にインストールする

データの流れを制御するためのツール『Apache Nifi』というものがあって、前々から興味を持っていたのでインストールをしてみることにした。
データフローを制御するってなんじゃいと最初思ったのだが、データ(ログとかセンサーのデータ)をApacheNifiに投げてやることで、Nifi側でこのログはこっちのシステム、あのログはあっち、このセンサーデータはそっちというようにデータの連携先を定義してやることができるらしい。ろ過装置のように流れているデータを少し加工して連携先に投げることもできるようで、まさにデータフローを制御することができるシステムのようだ。

その他『Apache Nifi』についての情報は、いろいろなとこに情報が記載されているので、そちらを参考にしてもらいたい。

で、今回はこのApacheNifiをCentOS 7にインストールしてみる。
例によってSELinuxおよびFirewalldは停止済。

1.ApacheNifiのインストール

まず、ダウンロード用のURLを調べて、以下のコマンドでApache Nifiのバイナリ(のtar.gz)をダウンロードしてくる。

wget http://ftp.jaist.ac.jp/pub/apache/nifi/1.0.0/nifi-1.0.0-bin.tar.gz

ファイルを展開して/opt配下に置いてやる。

tar xzvf nifi-1.0.0-bin.tar.gz
mv nifi-1.0.0 /opt/
cd /opt
ln -s nifi-1.0.0/ nifi

「nifi」というユーザを作成してフォルダの所有者を変更する。

useradd nifi
chown -R nifi. /opt/nifi*

Javaのインストールをして.bash_profileに追記を行う。

yum install -y java-1.8.0-openjdk-devel
echo "export JAVA_HOME=/etc/alternatives/java_sdk_1.8.0_openjdk" >> /home/nifi/.bash_profile

最後に、サービスファイルを作成して起動する。

echo "JAVA_HOME=/etc/alternatives/java_sdk_1.8.0_openjdk" >> /etc/sysconfig/nifi
cat <<EOF >> /etc/systemd/system/nifi.service
[Unit]
Description=Apache NiFi
After=network.target

[Service]
Type=forking
User=nifi
Group=nifi
ExecStart=/opt/nifi/bin/nifi.sh start
ExecStop=/opt/nifi/bin/nifi.sh stop
EnvironmentFile=/etc/sysconfig/nifi

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start nifi.service

これで、Nifiの管理画面にアクセスできるようになった。

2.ブラウザから管理画面にアクセスする

サービスを起動させたら、ブラウザから「http://ホスト名orIPアドレス:8080/nifi/」にアクセスする。
アクセス直後の画面がこちら。デフォルトの設定のままだと、特にインストール直後でログインとかは必要ないようだ。

アクセス直後からフロー図を書ける画面になるようだ。

3.適当にフローを作ってみる

インストールしただけだとあまり意味がないので、実際にフローを作ってみよう。
といっても、特にセンサーとなるような物がないのでなんかないかなと調べたところ、Twitterの情報が取れるようなのでそれを使うことにする。
事前に、こちらからアプリ登録とTwitterのAPIキー等の取得を忘れずに行う。

まず、画面左上にある「Processer」をドラッグしてくる。

追加できるProcesserの検索画面でTwitterを検索、選択して「ADD」。

Processerの追加ができたら、設定画面を開く。

Consumer Keyなど諸々の設定を行う。
[SETTINGS]で[Success]にチェックを入れるのを忘れずに。

次に、取得した内容のアウトプット先として、ファイルを設定する。
同じくProcesserから「PutFile」を選択して配置し、「GetTwitter」から線を伸ばして接続してやる。
これで、「GetTwitter」から「PutFile」へ処理が連携される。

「PutFile」の設定画面から、出力先のフォルダなどについて定義してやる(フォルダがない場合は作成してnifiに権限を付与する)。
[SETTINGS]タブの処理も忘れずに行うこと。

設定後は、「GetTwitter」「PutFile」ともに起動をすることでTwitterの内容を指定されたフォルダにJSON形式で出力するようになる。

これで、ひとまずデータの取得が行えるようになった。
間にさらにProcesserを挟むことで、ツイート内容に応じて出力先のファイルを変えるといったこともできるようだし、非常に面白そうなプロダクトだ。