Help us understand the problem. What is going on with this article?

AmbariによるStormクラスタのプロビジョニング

More than 3 years have passed since last update.

この記事は Hortonworks Advent Calendar 2016 の12/12(月)のエントリーとして投稿しています。

HDP(Hortonworks Data Platform)のコンポーネントの一部である Apache Ambari を利用して、AWSのEC2上で Apache Storm のクラスタをプロビジョニングすることをやってみます。
今回は、Storm を対象にしていますが、Hadoop/Spark/Kafkaなども同様の手順で実施できます。

概要

まずはじめに、今回利用するコンポーネントの簡単な説明。どちらもHDPに含まれるOSSです。

名称 ロゴ 説明
Ambari ambari_logo.png HDPにおけるクラスタマネージャ。HadoopだけでなくHDPで扱うコンポーネントに関して、クラスタの作成、設定の管理、モニタリング等の総合的な管理が行える。
Storm storm_logo.png スケーラブルで高速な分散ストリームデータ処理エンジン。Twitter社からOSSとして公開された、分散ストリームデータ処理エンジンの先駆け的存在。

Ambariを利用することで、Stormを手動でインストールや設定する必要がなくなり、半自動でクラスタの構築や設定の管理を行えるようになります。

構成

今回は、EC2上に構築しており、以下のような内容としています。

hdp-cluster (1).png

前提条件

本記事の前提として、以下のことを想定しています。

  • AWSのアカウントを持っており、VPCやEC2に関する基本的な知識を有していること。
  • Ambari2.4.2を利用する(2016/12/12時点の最新)。
  • 本記事の操作環境は、macOS Sierra(10.12)を利用している。

AWSの事前準備

VPCの作成

最初にクラスタを所属させるVPCを作成します。
AWSのコンソールから「VPC」の画面へ行き、「VPC ウィザードの開始」ボタンを押下してください。
ウィザードが開始されたら、「パブリックとプライベート サブネットを持つ VPC」を選択して、必要な内容を登録します。ここでのアドレスブロックは「10.0.0.0/16」としています。

vpc01.png

vpc02.png

セキュリティグループの作成

セキュリティグループとしては、以下のような内容を指定したものを作成します。

  • インバウンド
タイプ プロトコル ポート範囲 送信元
SSH TCP 22 MyIP
HTTP TCP 80 MyIP
カスタムTCPルール TCP 8080 MyIP
すべてのTCP TCP 0-65535 同一のセキュリティグループ内
すべてのUDP UDP 0-65535 同一のセキュリティグループ内
  • アウトバウンド
タイプ プロトコル ポート範囲 送信元
すべてのトラフィック すべて すべて 0.0.0.0/0

Ambariサーバのインストール

Ambariサーバ用のインスタンス作成

ここでは、Amazon Linux AMI を利用してインスタンスを作成します。
ambari-instance01.png

ambari-instance02.png

ネットワークを指定しますが、予め用意しておいたVPCを利用してください。
また、Ambariサーバは、パブリックなサブネットに配置します。
ambari-instance03.png

ストレージのサイズは、30GBとしていますが、実際の運用では適宜サイズを指定してください。
ambari-instance04.png

分かりやすいように「ambari-server」とタグを付けておきます。
ambari-instance05.png

予め用意しておいたセキュリティグループを指定します。
ambari-instance06.png

キーペアは、既に作成しているものを選択します。新しく作成しても構いません。
サーバへのログインに必要になるため、大切に保管してください。
ambari-instance07.png

これで、Ambariサーバ用のインスタンスが作成できました。
ambari-instance08.png

ログイン確認・初期設定

作成したインスタンスにSSHログインします。

local$ ssh -i ./hdp-key.pem ec2-user@35.162.201.125

ログインに成功したら、サービスの設定を変更します。

$ sudo chkconfig iptables off
$ sudo chkconfig ip6tables off
$ sudo chkconfig ntpd on
$ sudo service ntpd start

ここで、このインスタンスをベースとしたイメージを作成しておきます。
これは、後でHDPのノードとして利用します。

ambari-instance09.png

ambari-instance10.png

また、HDPのノードから、パスワードなしでログインできるようにしておくため、SCPで秘密鍵をアップロードします。アップロードしたファイルは、「id_rsa」というファイル名に変更して、「.ssh」ディレクトリの配下に配置します。

local$ scp -i ./hdp-key.pem ./hdp-key.pem ec2-user@35.162.201.125:~/.
local$ ssh -i ./hdp-key.pem ec2-user@35.162.201.125

$ mv ./hdp-key.pem ~/.ssh/id_rsa

Ambariサーバのインストール

やっとAmabariサーバのインストールを開始するところまで来ました。
ここからは、Ambariサーバのインタンスにログインしての操作になります。

まず最初に、Ambariをインストールするために、HDPとして公開されているリポジトリの定義を追加します。

$ sudo wget -nv http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.4.1.0/ambari.repo -O /etc/yum.repos.d/ambari.repo
$ sudo yum install ambari-server

読み込んだプラグイン:priorities, update-motd, upgrade-helper
Updates-ambari-2.4.1.0                              | 2.9 kB     00:00
Updates-ambari-2.4.1.0/primary_db                   | 8.3 kB     00:00
amzn-main/latest                                    | 2.1 kB     00:00
amzn-updates/latest                                 | 2.3 kB     00:00
依存性の解決をしています
・・・
総ダウンロード容量: 663 M
インストール容量: 754 M

Is this ok [y/d/N]: y

Downloading packages:
・・・
http://public-repo-1.hortonworks.com/ambari/centos7/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins から鍵を取得中です。
Importing GPG key 0x07513CAD:
 Userid     : "Jenkins (HDP Builds) <jenkin@hortonworks.com>"
 Fingerprint: df52 ed4f 7a3a 5882 c099 4c66 b973 3a7a 0751 3cad
 From       : http://public-repo-1.hortonworks.com/ambari/centos7/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins

上記の処理を行います。よろしいでしょうか? [y/N]y

Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
・・・
完了しました!
$ sudo 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)?  y
input not recognized, please try again: 
Customize user account for ambari-server daemon [y/n] (n)? y
Enter user account for ambari-server daemon (root):
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): 1

・・・
Successfully downloaded JCE Policy archive to /var/lib/ambari-server/resources/jce_policy-8.zip
Installing JCE policy...
Completing setup...
Configuring database...

Enter advanced database configuration [y/n] (n)? y
Configuring database...
==============================================================================
Choose one of the following options:
[1] - PostgreSQL (Embedded)
[2] - Oracle
[3] - MySQL / MariaDB
[4] - PostgreSQL
[5] - Microsoft SQL Server (Tech Preview)
[6] - SQL Anywhere
[7] - BDB
==============================================================================
Enter choice (1): 1
Database name (ambari): ambari
Postgres schema (ambari): ambari
Username (ambari): ambari
Enter Database Password (bigdata): 
Re-enter password: 

・・・
Adjusting ambari-server permissions and ownership...
Ambari Server 'setup' completed successfully.
$ sudo ambari-server start

Ambariにログインできることを確認します。
http://<ambari-serverのホスト>:8080にアクセスしてログイン画面が確認できればOKです。
ambari-server01.png

デフォルトのログイン情報は以下になります。

パラメータ
Username admin
Password admin

Stormのプロビジョニング

Storm用のインスタンス作成

先程保存したAMIのイメージから、Stormクラスタ用のインスタンスを作成します。

storm-instance01.png

ここでは「t2.medium」を選択していますが、Stormを動作させるので、適宜大きいサイズのインスタンスを指定してください。
storm-instance02.png

ホストは、全部で5つ作成します。ホストの内容は、最初の構成図の通りです。
また、このホスト群は、プライベートなサブネットに配置します。
storm-instance03.png

storm-instance04.png

storm-instance05.png

storm-instance06.png

これで、Stormクラスタ用のインスタンスが作成できました。
ここで作成されたホストの「プライベートDNS」をメモしておいてください。後ほど利用します。
storm-instance07.png

Stormのデプロイ

Ambariにログインして、Storm用のクラスタを作成します。

ambari-cluster01.png

最新版を選択します。
ambari-cluster02.png

「Target Hosts」では、Ambariからデプロイを行うHDPのノードを指定します。ここでは、先程メモしたEC2インスタンスのプライベートDNS(AWSのコンソールから確認できる)の値を、ホストの台数分指定してください。
「Host Registration Information」では、ホストにアクセスする際の秘密鍵を登録してください。また、ユーザアカウントは、デフォルトでは、"root"となっていますが、"ec2-user"に変更してください。
ambari-cluster03.png

これで内容を確認したら、各ホストに対して、Ambariのエージェントがインストールされます。
ambari-cluster04.png

Ambariのエージェントのインストールが無事に完了したら、次に、クラスタとして必要なOSSを選択します。
ここでは、「Zookeeper」「Storm」、および、Amabriよるモニタリングを確認する「Ambari Metrics」を選択してください。
ambari-cluster05.png

次に、どのホストに対して、何のプロセスをインストールするかを決定します。
ここでは、Zookeeper用に3台必要なのに加えて、マスターノードである Nimbusや モニタリング用の Storm UI Server なども適宜配置していきます。何をどこに配置するか、ビジュアルに確認できるので分かりやすいですね。
ambari-cluster06.png

次にスレーブとなるSupervisorの設定を行います。ここでは、5台のホストの内、Zookeeperを配置しない残りの2台を指定します。
ambari-cluster07.png

設定の内容ですが、まずはデフォルトでOKです。
ambari-cluster08.png

最後、内容を確認したら、デプロイを開始します。
ambari-cluster09.png

ambari-cluster10.png

動作確認

インストールが完了したら、Ambariの画面で、各サービスやホストの情報が確認できます。
以下のような画面が表示されればOKです。

ambari-cluster11.png

ambari-cluster12.png

Storm Topologyの実行

以下より、Stormの媒体をダウンロードします。

2016/12/12現在での最新版は、1.0.2ですが、AmbariによってインストールされるStormのバージョンが1.0.1のため、一応、1.0.1の媒体をダウンロードします。

  • apache-storm-1.0.1.zip

ファイルを展開して、以下にサンプルを同梱したjarがあることを確認します。

examples/storm-starter/storm-starter-topologies-1.0.1.jar

今回は、Nimbusが動作するホストで、Topologyのデプロイを行いますが、プライベートのサブネットにあるため、以下のような流れでファイルをアップロードします。

local -> ambari-server -> nimbus-server

local$ scp -i ./hdp-key.pem ./storm-starter-topologies-*.jar ec2-user@35.162.201.125:~/.
local$ ssh -i ./hdp-key.pem ec2-user@35.162.201.125

[ec2-user@ip-10-0-0-135 ~]$ ls
storm-starter-topologies-1.0.1.jar
[ec2-user@ip-10-0-0-135 ~]$ scp ./storm-starter-topologies-*.jar ec2-user@10.0.1.59:~/.
[ec2-user@ip-10-0-0-135 ~]$ ssh ec2-user@10.0.1.59

[ec2-user@ip-10-0-1-59 ~]$ ls
storm-starter-topologies-1.0.1.jar
[ec2-user@ip-10-0-1-59 ~]$ storm jar ./storm-starter-topologies-*.jar org.apache.storm.starter.SlidingWindowTopology slidingwindow
・・・
1701 [main] INFO  o.a.s.StormSubmitter - Finished submitting topology: slidingwindow

これで、サンプルのTopologyはアップできたので、StormUIで動作を確認します。
StormUIも、プライベートのサブネットにあるため、ローカルからはポートフォワーディングでアクセスします。

local$ ssh -N -L 18744:10.0.1.59:8744 -i ./hdp-key.pem ec2-user@35.162.201.125

これで、ブラウザから以下のURLにアクセスすることで、StormUIの画面が確認できます。

http://127.0.0.1:18744

以下のような画面が開き、slidingwindow というTopologyが表示されていればOKです。

storm-example01.png

まとめ

ネットワークの構成が多少複雑なため、手順としては多いですが、Ambari自体のインストール、そして、Ambariを利用したStormのプロビジョニングはとても簡単に実施できます。
Ambariの良いところは、プラットフォームごとにインストールするのではなく、関連するプラットフォームをまとめてプロビジョニング、モニタリングできるところにあると思います。
HDPを利用することで、簡単にビッグデータのプラットフォームを構築できますね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした