Apache NiFi って何だ~?

f:id:ts0818:20190830111513j:plain

Put simply NiFi was built to automate the flow of data between systems. While the term 'dataflow' is used in a variety of contexts, we use it here to mean the automated and managed flow of information between systems. This problem space has been around ever since enterprises had more than one system, where some of the systems created data and some of the systems consumed data. The problems and solution patterns that emerged have been discussed and articulated extensively. A comprehensive and readily consumed form is found in the Enterprise Integration Patterns

Apache NiFi Documentation

⇧  システム間のデータの流れ(データフロー)を、自動化してくれるツールらしいです。「データフローオーケストレーションツール」というものの1つらしいです。どうもボクです。

ちなみに、読み方は、「アパッチ ナイファイ」らしいっす。

Apache NiFiは2014年秋のNSA Technology Transfer Programが起源となっています。 NiFiは2015年7月にApache公式プロジェクトの一つとなりました。

Apache NiFi Dataflow Automation Concepts · ijokarumawak/hdf-tutorials-ja Wiki · GitHub

⇧  とあるように、

アメリカ国家安全保障局アメリカこっかあんぜんほしょうきょく、英語National Security Agency:NSA)は、アメリカ国防総省諜報機関である。

アメリカ国家安全保障局 - Wikipedia

⇧  米国家安全保障局の開発プロジェクトが、発祥らしいっす。 

1949年5月20日に「軍保安局」(Armed Forces Security Agency、AFSA)として設立された。

アメリカ国家安全保障局 - Wikipedia

中央情報局(CIA)がおもにヒューミント(HUMINT; human intelligence)と呼ばれるスパイなどの人間を使った諜報活動を担当するのに対し、NSAシギント(SIGINT; signal intelligence)と呼ばれる電子機器を使った情報収集活動とその分析、集積、報告を担当する。

アメリカ国家安全保障局 - Wikipedia

⇧  人による情報収集か、機器による情報収集か、それが問題だ、ということですかね。

その性質上諸外国に関する非常に高度な機密(一説では、大統領権限ですらアクセスできないレベルの情報も扱うと言われる)を扱うため、組織や活動内容、予算については明らかにされていない部分も多い。以前は組織の存在そのものすら国民に対しても公然ではなくNever Say Anything(何も喋るな)」「No Such Agency(そんな部署はない)」の略だ、などというお決まりのジョークがあった

アメリカ国家安全保障局 - Wikipedia

⇧ そんなジョーク言ったら、抹殺されるんでないの...お~、怖っ!

  • 本部 - メリーランド州フォート・ジョージ・G・ミード陸軍基地内(AFNを管理する「国防メディア拠点」もここにある)
  • 職員数 - 約30,000人(はっきりした数字は定まらない。)

アメリカ国家安全保障局 - Wikipedia

⇧  メリーランド州 と言えば、

メリーランドはアメリカ独立戦争でイギリス支配に対して反旗を翻した13植民地の1つとなった。1781年2月2日、メリーランドは連合規約を批准した13番目の州となった。このことによりアメリカ合衆国は統合され、主権を持った国家になった。

メリーランド州 - Wikipedia

⇧  アメリカ合衆国が生まれた時の13州のうちの、最後に参画した州らしいっす。 

 

NSAの極めて重大な任務として、「核戦争に備えること」がある。

アメリカ国家安全保障局 - Wikipedia

⇧  う~ん、日本の原爆が関係してるんかな?

というのも、NSAの創設に関与したのが、

ハリー・S・トルーマン英語Harry S. Truman1884年5月8日 - 1972年12月26日)は、アメリカ合衆国政治家上院議員、第34代副大統領、第33代大統領を歴任した。フランクリン・ルーズベルトの死を受けて1945年に副大統領から大統領に昇格した。第二次世界大戦の終了から冷戦の始まり、国際連合CIANSAペンタゴン(国防総省)の創設および朝鮮戦争などに関与した。

ハリー・S・トルーマン - Wikipedia

⇧ ハリー・S・トルーマン っていう大統領らしいんだけど、

白人至上主義者団体クー・クラックス・クランKKK)への加入歴もあるが全米有色人種地位向上協会で演説を行い公民権運動を支援した初めての大統領である。日本への原子爆弾投下について、投下書類(投下命令書)を承認したとされているが、トルーマンによる正式な承認は記録されていない

ハリー・S・トルーマン - Wikipedia

⇧  原爆投下にGOサイン出したと言われている人物らしいですね。KKKにも入っていたかと思えば、公民権運動を支援したりとか、結構やってることがめちゃくちゃ ですね。

 

はい、長々と脱線していまいましたが、 というわけで、今回は、Apache NiFi について、レッツトライ~。

 

Apache Nifi の構成

な、なんと!JVMJava Virtual MachineJava仮想マシン) で動作するものらしい。

f:id:ts0818:20190830120448p:plain

NiFi executes within a JVM on a host operating system. The primary components of NiFi on the JVM are as follows:

Apache NiFi Documentation

ちなみに、クラスター 環境でもイケるらしい。

f:id:ts0818:20190830121634p:plain

NiFi is also able to operate within a cluster.

Apache NiFi Documentation

クラスターって、

クラスター(Cluster)は「房」「集団」「群れ」の意味。ネットワークに接続した複数のコンピューターを連携して1つのコンピューターシステムに統合し、処理や運用を効率化するシステムのこと。

コンピューター同士は、ディスク装置の情報を物理的・論理的に共有するが、メモリー上の情報は共有しない。

クラスターには大きく分けて以下の2種類のシステムがある。

(1)HA(High Availability)クラスターシステム アベイラビリティ(高可用性)を高めることを目的としたクラスター。複数のコンピューターのうちアプリケーション実行の「本番用」と「待機用」を使い分けられる。1台のコンピューターに障害が発生すると、「クラスタソフト」と呼ばれるミドルウェアが残りの正常なコンピューターに切り替えるため、障害から早期に復旧できる。

(2)負荷分散クラスター スケーラビリティ(拡張性)を高めることを目的としたクラスター。複数のコンピューターに処理を分散することで、1台当たりの処理の負荷を低くし、全体の処理能力を向上させる。 クラスターは、各ユーザーが独自開発して使用する場合と、企業がサービスとして提供する場合がある。

 

クラスター | IT用語辞典 | 大塚商会

ことらしい。

 

Apache NiFi をインストールしてみる

公式サイトによりますと、

Downloading and Installing NiFi

NiFi can be downloaded from the NiFi Downloads Page. There are two packaging options available: a "tarball" that is tailored more to Linux and a zip file that is more applicable for Windows users. Mac OS X users may also use the tarball or can install via Homebrew.

To install via Homebrew, simply run the command brew install nifi.

For users who are not running OS X or do not have Homebrew installed, after downloading the version of NiFi that you would like to use simply extract the archive to the location that you wish to run the application from.

For information on how to configure the instance of NiFi (for example, to configure security, data storage configuration, or the port that NiFi is running on), see the Admin Guide.

Apache NiFi Documentation

⇧ってな具合らしいので、とりあえず、ダウンロードページへ。

http://nifi.apache.org/download.html

nifi.apache.org

ダウンロードページに行くと、 

f:id:ts0818:20190830124701p:plain

⇧  ダウンロードの選択肢としては、 

  • Sources
  • Binaries
  • Docker image

 の3つがあるらしい。

で、今回は、Docker image で試してみたいと思うので、Docker を使える環境を用意しておく必要があります。

自分は、Windows 10 Homeを使っているため、Docker ToolBox を インストールしています。 

公式のドキュメントの以下のページの「Supported platforms」で、

docs.docker.com

⇧  OS(Operaton System)ごとに、どれをインストールすれば良いか説明が載っています。

 

というわけで、ここからは、Docker環境が整っているという前提で。

まずは、Docker Hub で、Apache Nifi のDocker image をインストールしていきます。

https://hub.docker.com/r/apache/nifi/

hub.docker.com

⇧  上記のページの説明にある通り、
 

docker pull apache/nifi    

を実行すれば良いのですが、そのためには、Dockerデーモンが起動している必要があるので、docker コマンドを使える仮想マシンをまずは起動します。

Docker ToolBox をインストールしてる場合は、

docker-machine ls    

で、Docker ToolBoxで作成された仮想マシンの一覧 が表示されます。

f:id:ts0818:20190830132201p:plain

自分の場合は、Docker ToolBoxで作成された仮想マシンが、「default」「kusanagi-machine」という2つ存在することが分かりました。

今回は、「default」のほうを起動してみます。

docker-machine start default   

f:id:ts0818:20190830132620p:plain

指示された通りに、

docker-machine env [仮想マシン名] 

を実行。

f:id:ts0818:20190830132903p:plain

指示された通りに、

docker-machine regenerate-certs [name]

f:id:ts0818:20190830133055p:plain

そしたらば、改めて

docker-machine env [仮想マシン名] 

を実行。次のコマンドを実行するよう指示があるので、

@FOR /f "tokens=*" %i IN ('docker-machine env default') DO @%i

を実行で。

f:id:ts0818:20190830133208p:plain

これで、仮想マシン内のDockerデーモンが起動したと思われるので、Apache NifiのDocker image をインストールする準備が整ったかと。

「docker info」「docker version」コマンドで、docker の情報が見れるようです。

f:id:ts0818:20190830133914p:plain

というわけで、Apache Nifi の Docker image をインストールで。

docker pull apache/nifi    

f:id:ts0818:20190830134705p:plain

ちょいと時間がかかりますが、

f:id:ts0818:20190830134815p:plain

インストールできました~。

f:id:ts0818:20190830135024p:plain

イメージがインストールできたので、

f:id:ts0818:20190830135105p:plain

このイメージを元にコンテナを作成して起動します。

docker run --name [任意のコンテナ名] -p [ホストのポート]:[ゲストのポート] -d [REPOSITORY:TAG]  

f:id:ts0818:20190830140259p:plain

そうすると、コンテナが起動してるのが確認できます。

docker ps

f:id:ts0818:20190830140349p:plain

んで、ブラウザ上からアクセスできるらしいんですが、Docker ToolBox の場合は、仮想マシンのIP:[ホストのポート] じゃないとアクセスできないので要注意ですかね。

teratail.com

SSHポートフォワーディング を利用すれば、loclahost:[ホストのポート] とかでもアクセスできるようになるらしいっす。

公式のDocker の説明では、Linux 環境では、

f:id:ts0818:20190830141343j:plain

という構成で、Windows 環境では、

f:id:ts0818:20190830141434j:plain

っていう構成になるため、Docker クライアントが DOCKER_HOST 内に含まれるかどうかが変わってしまうため、Linux 環境であれば、localhost でアクセスできても、Windows 環境では、loclahost でアクセスできないってことになっているのかと。

ただし、Docker ToolBox ではなく、Docker for Windows の環境であれば、もしかしたら、localhost でアクセスできるかもです。(仮想化の方法が異なるので)

なので、Docker ToolBox を使っている場合は、

docker-machine ip

f:id:ts0818:20190830142323p:plain

で、仮想マシンIPアドレスを確認して、 ブラウザにアクセスします。

f:id:ts0818:20190830144720p:plain

そうすると、

f:id:ts0818:20190830142639p:plain

無事に表示されました~。

Docker コンテナで起動してるので、Docker コンテナが停止、または削除された場合は、アクセスできなくなります。

docker rm -f [コンテナ名]

f:id:ts0818:20190830142807p:plain

f:id:ts0818:20190830143019p:plain

⇧  コンテナを削除したので、アクセスできなくなったのが確認できました。

仮想マシンを停止で。

docker-machine stop [仮想マシン名]    

f:id:ts0818:20190830154244p:plain

 

というわけで、Apache Nifi をインストールするところまでできました~、最後にコンテナを削除してますが。

次回は、Apache Nifi を実際に操作していきたいですね。

今回はこのへんで。