R&Dトレンドレポート

第8回 Hadoopの環境を作ってみよう!

この記事を読むのに必要な時間:およそ 4 分

hadoop環境の構築 事前準備

前回ご紹介したhadoopですが,今回は実際にhadoopが動作する環境を構築したいと思います。インストールする環境は,以前TokyoTyrantを導入した仮想マシンをそのまま流用したいと思います。

環境
OS : CentOS 5.4(32bit)
構成
hadoop1:masterサーバ…NameNode/JobTracker(NFSサーバ)
hadoop2, hadoop3:slaveサーバ…DataNode/TaskTracker(NFSクライアント)
  • NameNode, DataNodeはHDFSのための機能→masterサーバ
  • JobTracker, TaskTrackerはMapReduceのための機能→slaveサーバ

NFSはhadoopの設定やプログラムを共通で使用するために導入します(導入の手間を軽減するため)⁠

図1 システム構成図

図1 システム構成図

それでは構築作業を進めていきます。

NFSディレクトリの作成

hadoop1に/usr/local/apach_projディレクトリを作成します。このディレクトリにはhadoopnのバイナリや設定ファイルが置かれ,hadoop2, hadoop3から共通に使用されることになります。NFSの設定については後で記述します。

hadoop1でディレクトリを作成します。

# mkdir /usr/local/apache_proj

Javaのインストール

hadoopはJavaプラットフォームで動作しますので,事前にJavaをインストールしておく必要があります。

# yum install java-1.6.0-openjdk-devel

とし,Javaをインストールします。

java-1.4.2-gcj-compatが元々入っている可能性がありますが,こちらのJavaではうまく動作しないようです。openjdkを入れることでalternativesによりopenjdkが最優先になります。ならない場合はgcj-compatを削除してください。

host名の設定

hadoop1, hadoop2, hadoop3がお互いがホスト名で通信できるように設定します。ここではそれぞれのサーバの/etc/hostsを使用し,ホスト名とIPアドレスの組み合わせを記述します。

私の環境では以下の情報をそれぞれのサーバの/etc/hostsに記述しています。

192.168.47.101	hadoop1
192.168.47.102	hadoop2
192.168.47.103	hadoop3
192.168.47.103	hadoop3

接続確認は,ping hadoop2などとして確認しましょう。

今回の構成ではLANの中にある安全な環境という前提で,ファイアウォールは全て解除しています。

# /etc/init.d/iptables stop

で停止させておきましょう。また,SELINUXもdisabledとしています。

hadoopのダウンロード

hadoopのパッケージはHadoop Distributed File System Releasesのページからからダウンロードが可能です。

hadoop1でダウンロードします。

# wget http://www.meisei-u.ac.jp/mirror/apache/dist//hadoop/core/hadoop-0.21.0/hadoop-0.21.0.tar.gz

このパッケージにはhadoopのHDFS,MapReduceの2つのパッケージが入っています。

ダウンロードしたファイルをapache_projに移動し,展開します。

# mv hadoop-0.21.0.tar.gz /usr/local/apache_proj
# cd /usr/local/apache_proj
# tar zxvf hadoop-0.21.0.tar.gz

hadoop-0.21.0というディレクトリが作成されたと思います。バージョン番号が入っていては環境変数の設定などが煩雑になりますので,リンクを作成します。

# ln -s hadoop-0.21.0 hadoop

これで,/usr/local/apache_proj/hadoopでダウンロードしてきたファイル群にアクセスが可能となります。

今後,このディレクトリは$HADOOP_HOMEとして記述します。基本的にはこれでhadoopの導入は終わりで,後は設定作業となります。

hadoop起動ユーザの追加

hadoopのプロセス起動用にユーザを追加します。このユーザがhadoopのプロセスを立ち上げることになります。私の環境では,hというユーザを作成しました。

hadoop1, hadoop2, hadoop3で以下のコマンドを実行します。

# useradd h

パスなしでのsshができるよう設定する

hadoop起動ユーザはパスワードなしでのsshログインが必要となります。hユーザをパスなしでsshさせるために,パスフレーズなしの鍵を生成します。

hadoop1で下記を実行します。

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

ここで作成したauthorized_keysをhadoop2, hadoop3にコピーします。

コピー後,hadoop1 → hadoop2, hadoop1 → hadoop3へのsshを行い,パスワードなしでログインできることを確認します。

環境変数の設定

hユーザの.bashrcを編集し,hadoopに関する環境変数を定義します。hadoop1の.bashrcに以下を追記します。

export HADOOP_HOME=/usr/local/apache_proj/hadoop
export PATH="$PATH:$HADOOP_HOME/bin"

追記後,scpを用いてhadoop2, hadoop3にコピーします。

$ scp .bashrc h@hadoop2:~
$ scp .bashrc h@hadoop3:~

これでhadoopコマンドへのpathが通り,'hadoop'だけでコマンドが実行できるようになります。

パーミッションの設定

/usr/local/apache_projディレクトリに対し,hユーザのパーミッションを設定します。

# chown -R h:h /usr/local/apache_proj

ディレクトリの設定

hadoopで必要なデータ保存ディレクトリやpidファイルの場所の設定をします。全てのサーバで以下のコマンドを実行します。

# mkdir /usr/loal/hdfs
# chwon -R h:h /usr/local/hdfs

著者プロフィール

脇本武士(わきもとたけし)

都内中小IT企業(メイサンソフト(株))に所属。某大手自動車会社でのシステム開発,運用を経て,現在は研究開発部署に席をお借りしています。DB周りの保守サポート,ウェブ技術開発を主に手がけてきました。現在は大規模計算フレームワークの活用とKVSに注目しています。普段はOS Xを使用していますが一番よく使うアプリはTerminalです(笑)。

R&Dトレンドレポート(てくらぼ)

コメント

コメントの記入