こんにちはー、梶川です。今は「データビジネス本部」と言う、BigDataやらIoTやらを扱う部におります。久し振りにブログ書きますー。
今回は、Apache NiFiについての紹介です。
Apache NiFiとは?
Apache NiFiってご存知でしょうか。Apache NiFiはシステム間のデータフローをWebベースUIから定義することができるシステムで、パッと見データの流れをとても分かりやすくしてくれます。また、スケーラブルな構成も可能となっており、ビッグデータやIoTなどのデータを処理するのに適しています。
ピンとこないですよね。もっと簡単に例を言うと、「HTTPでデータを受けて、データをJSONに変換し、ファイルへ保存」のように(もちろんこれだけではない。)、システム間のデータの流れをWebベースUIで定義し、実行することができます。
こんな感じです。
このように、データの流れが一目で分かる形になります。
今回は、Apache NiFiのインストール方法の紹介をしたいと思いますが、IDCFクラウドの連携サービスであるHortonworksのHortonworks DataFlow (HDF™)を利用したセットアップを紹介します。また、Hortonworksでは、Future of DataでHortonworks DataFlow (HDF™)のハンズオンなどを定期的に実施されていますので、参加してみても良いかと思います。時間が合わない、遠くていけない、といった方もおられると思いますので、こちらのハンズオンで提供されている資料をみながら進められる程度までは、今回のブログで紹介します。
なお、別になりますが、Hortonworksでは「Hortonworks Data Platform (HDP®)」といったHadoopディストリビューションも提供(こちらの方が有名で、ご存知の方も多そうです。)しており、こちらに興味がある方は、HDPをAmbariでインストールなどを参照してみてください。
ドキュメントについて
今回のインストールはHortonworksが提供しているドキュメントに基づいています。
Apache Ambari Installation
本ブログでは、IDCFクラウドのテンプレートを利用するうえでは不要と思われる手順を省略していますので、以降の手順で困った場合は、この公式ドキュメントも参照してみてください。
利用環境について
今回インストールに使用したHDFのバージョンは2.4.1になります。どんどん新しいバージョンがリリースされていますので、インストールされる時には2.4.1が最新では無いかもしれませんが、基本的なインストール手順が変わるわけではないため、違うバージョンをインストールする場合でも参考にはなると思います。
環境 : IDCFクラウド OS : CentOS 7.3 64-bit (IDCFクラウド標準テンプレート) スペック : standard.S8 HDF : Version 2.4.1
OSの準備
HDFは各OSに対応していますが、今回はCentOS7へインストールしてみようと思います。まずは、IDCFクラウド上で仮想マシンを作成してください。こちらのブログ執筆時点で最新の「CentOS 7.3 64-bit」を選択しましたが、CentOS7系の最新を選択してください。以下の記事では、テンプレートとして提供しているCentOS 7.3を想定しています。メモリは8GB程度は欲しいので、スペックは「standard.S8」以上を選択してください。
OSの設定
CentOSインストール後に、次の設定を行ってください。
CentOS7を最新にアップデート & openjdkのインストール
# yum -y update # yum -y install java-1.8.0-openjdk-devel # init 6
sshの設定
HDFでは、管理ツールであるAmbariからターゲットホストに対してsshでログインし、各ソフトウェアをインストールしますので、Ambari(今HDFをインストールしようとしているホスト)からsshでパスワードレスで入れる必要があります。今回は1ホストにすべてのソフトウェアをインストールするため、自分自身のホストにsshでパスワードレスログインができればokです。もし、複数ホストを利用してセットアップする場合は、Ambari(今HDFをインストールしようとしているホスト)からsshでパスワードレスで入れる用に設定してください。(つまり、複数ホストへの分散インストールなども簡単にできるということになります。)
# ssh-keygen -f /root/.ssh/id_rsa -N '' # cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
Ambariのインストール
HDFでは管理ツールにAmbariを利用しますので、まずはAmbariをインストールします。 AmbariのRepositoryを設定し、yumでインストールしていきます。
# wget -nv http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.4.2.0/ambari.repo -O /etc/yum.repos.d/ambari.repo # yum -y install ambari-server
※ PostgreSQLが一緒にインストールされます。AmbariではバックエンドにPostgreSQLを使うのがデフォルトですが、MySQLなど他のRDBを選択することもできます。詳細はドキュメントを参照してください。
Ambariのセットアップ
次に、インストールしたAmbariをセットアップします。 いくつか質問されますが、基本的にはデフォルトの選択で大丈夫です。ただし、Javaの選択については、「[3] Custom JDK」を選択して、「Path to JAVA_HOME」へ「/usr/lib/jvm/java」を設定してください。
# ambari-server setup Using python /usr/bin/python Setup ambari-server Checking SELinux... SELinux status is 'disabled' Customize user account for ambari-server daemon [y/n] (n)? Adjusting ambari-server permissions and ownership... Checking firewall status... Checking JDK... [1] Oracle JDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8 [2] Oracle JDK 1.7 + Java Cryptography Extension (JCE) Policy Files 7 [3] Custom JDK ============================================================================== Enter choice (1): 3 WARNING: JDK must be installed on all hosts and JAVA_HOME must be valid on all hosts. WARNING: JCE Policy files are required for configuring Kerberos security. If you plan to use Kerberos,please make sure JCE Unlimited Strength Jurisdiction Policy Files are valid on all hosts. Path to JAVA_HOME: /usr/lib/jvm/java Validating JDK on Ambari Server...done. Completing setup... Configuring database... Enter advanced database configuration [y/n] (n)? Configuring database... Default properties detected. Using built-in database. Configuring ambari database... Checking PostgreSQL... Running initdb: This may take up to a minute. Initializing database ... OK About to start PostgreSQL Configuring local database... Connecting to local database...done. Configuring PostgreSQL... Restarting PostgreSQL Extracting system views... ambari-admin-2.4.2.0.136.jar ............ Adjusting ambari-server permissions and ownership... Ambari Server 'setup' completed successfully.
HDF Management Pack
Ambariはデフォルトでは「Hortonworks Data Platform (HDP®)」を管理するように設定されています。HDFの管理を行うために、HDF Management Packのインストールが必要です。
インストールで--purge
を指定しているため、インストールの途中で既存のスタック定義を削除して置き換えるが良いか?と聞かれますが、「yes」を選択してください。
# ambari-server install-mpack --mpack=http://public-repo-1.hortonworks.com/HDF/centos7/2.x/updates/2.1.4.0/tars/hdf_ambari_mp/hdf-ambari-mpack-2.1.4.0-5.tar.gz --purge --verbose Using python /usr/bin/python Installing management pack INFO: Installing management pack http://public-repo-1.hortonworks.com/HDF/centos7/2.x/updates/2.1.4.0/tars/hdf_ambari_mp/hdf-ambari-mpack-2.1.4.0-5.tar.gz INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: Download management pack to temp location /var/lib/ambari-server/data/tmp/hdf-ambari-mpack-2.1.4.0-5.tar.gz INFO: Downloading http://public-repo-1.hortonworks.com/HDF/centos7/2.x/updates/2.1.4.0/tars/hdf_ambari_mp/hdf-ambari-mpack-2.1.4.0-5.tar.gz to /var/lib/ambari-server/data/tmp/hdf-ambari-mpack-2.1.4.0-5.tar.gz INFO: Downloading to: /var/lib/ambari-server/data/tmp/hdf-ambari-mpack-2.1.4.0-5.tar.gz Bytes: 38750066 INFO: Finished downloading http://public-repo-1.hortonworks.com/HDF/centos7/2.x/updates/2.1.4.0/tars/hdf_ambari_mp/hdf-ambari-mpack-2.1.4.0-5.tar.gz to /var/lib/ambari-server/data/tmp/hdf-ambari-mpack-2.1.4.0-5.tar.gz INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: Expand management pack at temp location /var/lib/ambari-server/data/tmp/hdf-ambari-mpack-2.1.4.0-5/ INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: AMBARI_SERVER_LIB is not set, using default /usr/lib/ambari-server INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: about to run command: /usr/lib/jvm/java/bin/java -cp '/etc/ambari-server/conf:/usr/lib/ambari-server/*:/usr/share/java/postgresql-jdbc.jar' org.apache.ambari.server.checks.MpackInstallChecker --mpack-stacks HDF CAUTION: You have specified the --purge option with --purge-list=['stack-definitions', 'mpacks']. This will replace all existing stack definitions, management packs currently installed. Are you absolutely sure you want to perform the purge [yes/no]? (no) yes INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: Purging existing stack definitions and management packs INFO: Purging stack location: /var/lib/ambari-server/resources/stacks INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: Stage management pack hdf-ambari-mpack-2.1.4.0-5 to staging location /var/lib/ambari-server/resources/mpacks/hdf-ambari-mpack-2.1.4.0-5 INFO: Processing artifact hdf-service-definitions of type service-definitions in /var/lib/ambari-server/resources/mpacks/hdf-ambari-mpack-2.1.4.0-5/common-services INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: Symlink: /var/lib/ambari-server/resources/common-services/NIFI/1.0.0 INFO: Symlink: /var/lib/ambari-server/resources/common-services/NIFI/1.1.0 INFO: Processing artifact hdf-stack-definitions of type stack-definitions in /var/lib/ambari-server/resources/mpacks/hdf-ambari-mpack-2.1.4.0-5/stacks INFO: Loading properties from /etc/ambari-server/conf/ambari.properties INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/configuration INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/hooks INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/kerberos.json INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/metainfo.xml INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/properties INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/repos INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/role_command_order.json INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/services/AMBARI_INFRA INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/services/AMBARI_METRICS INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/services/KAFKA INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/services/KERBEROS INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/services/LOGSEARCH INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/services/NIFI INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/services/RANGER INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/services/STORM INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/services/ZOOKEEPER INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/services/stack_advisor.py INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/upgrades INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.0/widgets.json INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.1/metainfo.xml INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.1/repos INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.1/services/KAFKA INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.1/services/NIFI INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.1/services/RANGER INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.1/services/STORM INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.1/services/ZOOKEEPER INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.1/services/stack_advisor.py INFO: Symlink: /var/lib/ambari-server/resources/stacks/HDF/2.1/upgrades INFO: Management pack hdf-ambari-mpack-2.1.4.0-5 successfully installed! INFO: Executing after-install hook script : /var/lib/ambari-server/resources/mpacks/hdf-ambari-mpack-2.1.4.0-5/hooks/after_install.py INFO: about to run command: ['/usr/bin/ambari-python-wrap', u'/var/lib/ambari-server/resources/mpacks/hdf-ambari-mpack-2.1.4.0-5/hooks/after_install.py'] INFO: Keeping views jar : /var/lib/ambari-server/resources/views/ambari-admin-2.4.2.0.136.jar Deleting views jar : /var/lib/ambari-server/resources/views/capacity-scheduler-2.4.2.0.136.jar Deleting views jar : /var/lib/ambari-server/resources/views/files-2.4.2.0.136.jar Deleting views jar : /var/lib/ambari-server/resources/views/hawq-view-2.4.2.0.136.jar Deleting views jar : /var/lib/ambari-server/resources/views/hive-2.4.2.0.136.jar Deleting views jar : /var/lib/ambari-server/resources/views/hive-jdbc-2.4.2.0.136.jar Deleting views jar : /var/lib/ambari-server/resources/views/hueambarimigration-2.4.2.0.136.jar Deleting views jar : /var/lib/ambari-server/resources/views/pig-2.4.2.0.136.jar Deleting views jar : /var/lib/ambari-server/resources/views/slider-2.4.2.0.136.jar Keeping views jar : /var/lib/ambari-server/resources/views/storm-view-2.4.2.0.136.jar Deleting views jar : /var/lib/ambari-server/resources/views/tez-view-2.4.2.0.136.jar Deleting views jar : /var/lib/ambari-server/resources/views/wfmanager-2.4.2.0.136.jar Deleting views jar : /var/lib/ambari-server/resources/views/zeppelin-view-2.4.2.0.136.jar Deleting views directory : /var/lib/ambari-server/resources/views/work INFO: Loading properties from /etc/ambari-server/conf/ambari.properties Ambari Server 'install-mpack' completed successfully.
Ambariの起動
それでは、Ambariを起動しましょう。
# ambari-server start Using python /usr/bin/python Starting ambari-server Ambari Server running with administrator privileges. Organizing resource files at /var/lib/ambari-server/resources... Ambari database consistency check started... No errors were found. Ambari database consistency check finished Server PID at: /var/run/ambari-server/ambari-server.pid Server out at: /var/log/ambari-server/ambari-server.out Server log at: /var/log/ambari-server/ambari-server.log Waiting for server start.................... Ambari Server 'start' completed successfully.
HDFのインストール
Ambariのインストールが終わったら、AmbariからHDFのインストールを行っていきます。 ブラウザでAmbariへアクセスする必要があるため、IDCFクラウド上でIPアドレスの設定を行ってください。 ポートフォワードの設定を行うか、スタティックNATの設定を行い、ファイアウォールの設定を行います。
仮想マシンへの接続方法 ポートフォワード編
仮想マシンへの接続方法 スタティックNAT編
ファイアウォールの設定方法
Ambariはデフォルトで「ポート8080」で起動しています。
上述は正攻法なのですが、AmbariからNiFi UIへのリンクなどが、ホスト名(hdf-sv1.cs3cidcfcloud.internalなど、DHCPから設定される名前)でリンクされているので、次の方法でアクセスするのがオススメです。
IDCFクラウドの内部DNS名にブラウザで直接アクセス(小ネタ)
この方法であれば、直接ホスト名でアクセス可能になります。 (「 http://hdf-sv1.cs3cidcfcloud.internal:8080/ 」や「 http://hdf-sv1.cs3cidcfcloud.internal:9090/nifi/ 」などと、ホスト名でアクセスできます。)
ログイン
それではブラウザで、セットアップしたサーバの8080ポートへアクセスしてください。
デフォルトのID/PW
はadmin/admin
となっていますので、ログインしてください。
ここから、「Launch Install Wizard」をクリックし、Wizardにしたがってインストールしていきます。
各ソフトウェアのセットアップ
セットアップするクラスタに名前を付けます。
HDFのバージョンを選択します。デフォルトで選択されている「HDF-2.1.4.0」で問題ありません。
インストールオプションでは、インストール先ホストの選択を行います。今回は1ホストにすべてをインストールするため、Target HostsへAmbariをインストールした自分自身のホスト名(サーバーコンソール上で、hostname -f
で表示されるホスト名。)を指定します。
また、「Provide your SSH Private Key to automatically register hosts」へOS設定時に作成したssh-keyを指定します。(あまりセキュアなやり方ではありませんが、サーバーコンソール上で、cat /root/.ssh/id_rsa
で表示される内容を貼り付けてください。セキュリティを気にされる方は、別の方法でお願いします。)
インストール先ホストに問題がないかがチェックされます。 「Click here to see the warning.」をクリックすると、warningが確認できるのですが、IDCFクラウドのCentOS7テンプレートからインストールしている場合、「Service Issues(1)」で「ntpd Not running」となっていると思います。
これは、CentOS7では時刻同期にntpdではなく、chronyが利用されるようになったため、ntpdがインストールされていないためです。ntpdを入れることもできますが、要は時刻同期がされていれば問題ないため、このまま進めて問題ありません。
Warningが残っていると進めてよいか聞かれますが、問題点がntpdだけであればそのまま進めましょう。
次に、インストールするサービスの選択になります。デフォルトでNiFiは選択されていますので、今回はすべてデフォルトで行います。
ここでは、どのホストにどのサービスを入れるかの指定になりますが、今回は1台のサーバーにすべてをインストールするため、このまま次へ進めます。(複数ホストで構成する場合、ここでどのホストに何を入れるかを指定できます。また、冗長構成が可能なサービスは、冗長構成でのインストールも可能です。)
次に複数のSlaveを持てるサービスや、各サービスのクライアントツールをどのホストにインストールするかの指定を行います。ここも、今回は1ホストしかないため、デフォルトのまま次へ進みます。
次に各サービスのコンフィグレーション設定を行います。赤くなっている部分は必ず指定しなければならないパラメーターが指定されていないことを示しているため、指定しましょう。
「Ambari Metrics」の「General」の「Grafana Admin Password」が赤くなっていますので、パスワードを指定します。
「NiFi」の「Advanced nifi-ambari-config」の「Encrypt Configuration Master Key Password」「Sensitive property values encryption password」が赤くなっていますので、パスワードを指定します。なお、パスワードは12文字以上の文字列を指定しないと、NiFiが起動すらしない事態に陥るのでご注意ください(もちろん私はハマりました)。
次に進むと、指定したコンフィグがチェックされ、問題があれば報告されます。Warningとして、いくつかのパラメータ推奨と、ErrorとしてNiFiの「nifi.toolkit.token」が指摘されますが、今回は影響無いのでそのまま進めます。もちろん説明を読んでもらって、パラメーターを修正していただいても良いと思います。もちろん、セットアップ後にも修正できます。
最後にレビューが表示されます。問題なければ次へ進みましょう。
インストールが進んで、100%になりSuccessとなれば、完了です!
インストール後のAmbariはこのような画面になります。
最後にもう一つ、先に紹介したHDFのハンズオンではStormを使うため、StormのViewを設定しておきましょう。
右上の「admin」をクリックし、左のメニューから「Views」を選択します。「Create Instance」をクリックします。
各パラメーターをスクリーンショットのように設定してください。
画面右上のadminのすぐ隣りのメニューから「Storm_View」を選択すると、StormのUIを表示できるようになります。
HDFハンズオンの資料の補足
あとは、Future of DataのHDFハンズオンで利用されている、HDFのハンズオンの資料をみながらApache NiFiを試してみればよいのですが、こちらのハンズオンの中では、Stormのアプリケーンは既にセットアップ済みといった形で進んでいきます。
ここでは補足として、このStormアプリのコンパイル方法と実行方法を記載しておきます。 あまり細かくは記載しませんが、mavenを使ってコンパイルするため、mavenのインストール、git cloneして、コンパイルして、storm上で実行、の流れになります。
# yum -y install maven # git clone https://github.com/ijokarumawak/hdf-tutorials-ja.git # cd hdf-tutorials-ja/storm # mvn package
hdf-tutorials-ja/storm/target
ディレクトリの下に、hdf.tutorial.storm-1.0-SNAPSHOT.jar
と言うファイル名でjarファイルができあがります。これを、storm
コマンドで実行します。
# storm jar target/hdf.tutorial.storm-1.0-SNAPSHOT.jar com.hortonworks.hdf.tutorial.storm.ReportingTopology "HOST_NAME:6667" "input" "report" 10 3
上記のHOST_NAMEはhostname -f
で表示されるホスト名を指定してください。
実行時に「/usr/bin/storm: 行 2: /usr/hdf/2.1.4.0-5/etc/default/hadoop: そのようなファイルやディレクトリはありません」とエラーが表示されますが、問題ありません。
Storm UIからみると「ReportingTopology」と言う名前のTopologyが登録されているのがわかります。
その他のHDFハンスオンドキュメントの注意事項として、
- Kafka Brokersに「0.hdf.aws.mine」とホスト名を指定する箇所がありますが、IDCFクラウドでは、当然これでは動かないので
hostname -f
で表示されるホスト名を指定してください。 - PutFile Processorで出力Directoryを指定する箇所がありますが、存在しないので予め作成しておく必要があります。また、NiFiの起動ユーザー(nifi)での書き込み権限が必要です。
# mkdir -p /opt/hdf-handson/report # chmod 777 /opt/hdf-handson/report
- KafkaのtopicはNiFiが作ってくれるようなので、予め作っておく必要はありません。
これで、一通りHDFハンズオンを実行できると思います。 皆さん試してみてください!
最後の最後に….
ここまできてから言うのもなんですが、HDFはSandboxの形でVMwareのOVAイメージが公開されています。 こちらをIDCFクラウドへインポートすることでも、HDFを利用することができます。 私の方ではインポートして動くところまでは確認しています。ただ、やはりIDCFクラウドへ最適化されているわけではないため、上述のようにIDCFクラウドの標準テンプレートをベースにインストールすることをオススメします。