Hadoopの分散環境を、VMware Playerを用いた仮想マシンを使って構築してみる。
複数の仮想マシンを起動してHadoopクラスターを組む。
|
|
CDH3版Hadoop本体がCentOSへインストールされている前提。
そのCentOSをNameNodeとし、VMイメージをコピーしてDataNodeを作る。
# yum install -y hadoop-0.20-namenode # yum install -y hadoop-0.20-datanode # yum install -y hadoop-0.20-secondarynamenode # yum install -y hadoop-0.20-jobtracker # yum install -y hadoop-0.20-tasktracker
# cd /etc/hadoop-0.20 # cp -rp conf.empty conf.cluster # cd conf.cluster
# alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop-0.20/conf.cluster 50 # alternatives --display hadoop-0.20-conf
# ifconfig
192.168.129.2 namenode.hadoop.hishidama.jp namenode
ファイル名 | 設定例 | 備考 |
---|---|---|
core-site.xml |
<property> <name>fs.default.name</name> <value>hdfs://namenode:50010</value> </property> |
|
<property> <name>hadoop.tmp.dir</name> <value>/var/lib/hadoop-0.20/cache/${user.name}</value> </property> |
||
hdfs-site.xml |
<property> <name>dfs.replication</name> <value>2</value> </property> |
レプリケーション(データの複製)数の指定。 |
<property> <name>dfs.permissions</name> <value>false</value> </property> |
HDFSへアクセスできる権限制限の有無。 true(デフォルト)にしておくと、 書込権限の無いディレクトリーへファイルをputしようとしたときに 「 org.apache.hadoop.security.AccessControlException: Permission
denied 」が発生する。 |
|
<property> <name>dfs.http.address</name> <value>namenode:50070</value> </property> |
||
<property> <name>dfs.name.dir</name> <value>/var/lib/hadoop-0.20/cache/hadoop/dfs/name</value> </property> |
||
mapred-site.xml |
<property> <name>mapred.job.tracker</name> <value>namenode:50011</value> </property> |
# mkdir -p /var/lib/hadoop-0.20/cache # chmod -R 1777 /var/lib/hadoop-0.20 # su - hdfs $ hadoop namenode -format $ exit
# /etc/init.d/hadoop-0.20-namenode start # /etc/init.d/hadoop-0.20-jobtracker start
HOSTNAME=datanode01.hadoop.hishidama.jp
192.168.129.3 datanode01.hadoop.hishidama.jp 192.168.129.4 datanode02.hadoop.hishidama.jp 192.168.129.5 datanode03.hadoop.hishidama.jp
# /etc/init.d/hadoop-0.20-datanode start # /etc/init.d/hadoop-0.20-tasktracker start
サービス名 | ネームノード | データノード |
---|---|---|
hadoop-0.20-datanode | ● | |
hadoop-0.20-jobtracker | ● | |
hadoop-0.20-namenode | ● | |
hadoop-0.20-secondarynamenode | ||
hadoop-0.20-tasktracker | ● |
Hadoopの各デーモンが起動しているかどうかは、以下のコマンドで確認できる。
# /etc/init.d/hadoop-0.20-namenode status # /etc/init.d/hadoop-0.20-jobtracker status # /etc/init.d/hadoop-0.20-datanode status # /etc/init.d/hadoop-0.20-tasktracker status
# service --status-all | grep node # service --status-all | grep tracker
複数のVMware Playerをひとつずつ起動するのは面倒なので、まとめて起動するバッチを作ってみた。[2012-01-07]
set BATDIR=%~dp0 set VMEXE=%ProgramFiles(x86)%\VMware\VMware Player\vmplayer.exe start "%VMEXE%" "%BATDIR%hadoop-NameNode\CentOS 64bit.vmx" start "%VMEXE%" "%BATDIR%hadoop-DataNode01\CentOS 64bit.vmx" start "%VMEXE%" "%BATDIR%hadoop-DataNode02\CentOS 64bit.vmx" start "%VMEXE%" "%BATDIR%hadoop-DataNode03\CentOS 64bit.vmx" pause
startコマンドを使ってVMware Playerを起動する。(startを使うと終了まで待たずに戻ってくる)
startの第1引数にはフルパスで実行ファイルを指定する。
VMware Playerのパスにスペースが含まれているし、VMXファイルにもスペース入りの名前を使ってしまったので、パスはダブルクォーテーションで囲む。