YARNクラスタの構築をAnsibleで自動化する

さて、別記事でクラスタの構築をやっていますが、手作業でやるのは面倒ですよね。私は面倒です。

スケールさせられるのが分散処理基盤たるHadoopの魅力。ノード追加もストレスなくやりたいものです。Ansibleでやってしまいましょう。

前提構成

クラスタとして構築する予定の各ノードが、管理対象としてセットアップされているものとします。具体的な作業はAnsibleの解説を参照して下さい。
Hadoopの実行ユーザuserとしてコントローラにログインし、AnsibleのPlaybookを実行していきます。

また、Hadoopインストール用のtarballはコントローラにダウンロードしておきます。
今回はコントローラに置いたtarballを管理対象(クラスタの各ノード)にコピー・解凍することにします。
もちろん、get_urlしてもいいのですが、プロキシ環境で設定が面倒だったためです。

ファイルの準備

コントローラで作業用のディレクトリを作成し、必要なファイル一式を作成しましょう。
ディレクトリ構成の完成像はこんな感じ。

Playbook本体のprep.ymlファイルとsendkey.ymlファイルの他、Playbookに読み込ませるために、下記のようなファイルを準備しておきます。

core-site.xmlファイルやhdfs-site.xmlファイル、yarn-site.xmlファイルは元の記事と同じ内容で作成してassetsサブディレクトリに格納しておきます。
一応再掲。

Playbookの作成と実行:Hadoopのインストール

まずはHadoopをインストールする諸々をprep.ymlファイルとして作成していきます。
一部にroot権限が必要なものがあったので、基本become: yesで昇格、不要な場合のみ除外(become: no)していきます。
あまり賢いPlaybookではありませんが、まあ動けばよし、ということで。

下記のように、権限昇格用のオプションをつけてPlaybookを実行します。
また、公開鍵をダウンロード(fetchモジュール)するためのサブディレクトリ(tmp)を事前に作成しておきます。

Playbookの作成と実行:SSH公開鍵の転送

公開鍵を対象ノードに登録するには、各ノードの~/.ssh/authorized_keysファイルにアクセス元の鍵をすべて列挙しておく必要があります。
前のPlaybookで全ての公開鍵(と登録済の鍵)を個別のファイルとダウンロードしておいたので、後で一括でコピーするために、一旦これらを全て一つのファイルに書き出しておきます。

Ansibleで自動化しても良かったのですが、ちまちまタスクを書くのが面倒だったのでPythonスクリプト(combine_keys.py)を組んで代替としました。
tmpサブディレクトリ以下にあるファイルを読み、内容をまとめて同じファイルtmp/keys.pubに書き出すだけのスクリプトです。

sendkey.ymlファイルとしてPlaybookを作成します。Pythonスクリプトで集めた公開鍵を各ノードにコピーするタスクです。

上記で作成したスクリプトとPlaybookを順に実行します。

残りの作業

あとはHDFSの初期フォーマットと、各ノード機能の立ち上げが残っていますが、これは各マシンにログインして実行しましょう。

Masterノードへログインして行う作業:

Slaveノードへログインして行う作業(該当ノード台数分だけ繰り返す):