最後は完全分散モードを試してみましょう。
今回の例では3台の仮想サーバを使ってHadoopクラスタを構築してみます。
まず疑似分散モードのときのようにそれぞれのサーバ同士がSSHで鍵無しアクセスできるように設定しないといけないのですが、完全分散モードの場合、それぞれのサーバへのアクセスがホスト名で行えるように設定しなければいけません。/etc/hostsファイルを以下のように編集し、それぞれのサーバにホスト名を設定してください。今回はそれぞれにhadoop1、hadoop2、hadoop3というホスト名を付けました。
192.168.11.20 hadoop1 192.168.11.21 hadoop2 192.168.11.22 hadoop3
設定したらそれぞれのサーバ上からSSHでそれぞれのサーバにログインできることを確認しておきましょう。ホスト名で問題なくログインできれば大丈夫です。
ここからは各種設定をしていきます。まず、マスターノード(今回はhadoop1)上で以下の2つのファイルを編集します。これもすべてホスト名で設定するので注意してください。
hadoop1
hadoop1 hadoop2 hadoop3
また、全ノード上で以下のファイルを設定します。
具体的な設定内容は以下のようになります。
HDFSのフォーマット
ここまで来たら設定は完了です。疑似分散モードのときと同じようにHDFSのフォーマットを行います。マスターノード(hadoop1)上で実行してください。
疑似分散モードでHadoopを起動していたサーバをそのまま使っている場合など、フォーマットがうまくいかない場合があると思います。もしフォーマットがうまくいかない場合には各サーバで以前にHDFSのディレクトリが構築されたディレクトリ(つまり/tmp/hadoop-hadoop)を一度削除してから再度フォーマットしてみてください。
デーモンの起動
最後にデーモンを起動します。こちらもマスターノード(hadoop1)上で実行してください。
分散疑似モードのときとは違い、デーモンがそれぞれのサーバで起動していることがわかります。前述したjpsコマンドを使えばきちんと起動していることが確認できるのでやってみてください。hadoop1上で実行するとこのような結果になるでしょう。
スレーブノード(hadoop2、hadoop3)上で実行すればデータノードとタスクトラッカーだけが起動していることがわかります。
Hadoop処理の実行
これで準備は整いました。では、実際に完全分散モードで動かしてみます。疑似分散モードのときと同じように、inputディレクトリをそのままHDFS上に配置します。
Hadoop処理を実行するコマンドはスタンドアロンモードや疑似分散モードのときと同じです。どのモード(スタンドアロンモード、疑似分散モード、完全分散モード)で実行されるかは設定ファイルの設定によって判定されます。
※11 HDFS上にoutputディレクトリが存在しない場合には省略可能です
結果はこのようになりました。正しくカウントされていることがわかります。
Copyright © ITmedia, Inc. All Rights Reserved.