S-JIS[2011-09-25/2012-01-07] 変更履歴

Hadoop(仮想)分散環境

Hadoopの分散環境を、VMware Playerを用いた仮想マシンを使って構築してみる。
複数の仮想マシンを起動してHadoopクラスターを組む。


CentOSへのインストール

CDH3版Hadoop本体がCentOSへインストールされている前提。
そのCentOSをNameNodeとし、VMイメージをコピーしてDataNodeを作る。

  1. VMware上のCentOSを起動し、rootユーザーでログインする。
  2. NameNodeや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
  3. 新しいコンフィグレーションを作成する。
    1. 単独環境用のconf.emptyをコピーして分散環境用のconfを作る。
      # cd /etc/hadoop-0.20
      # cp -rp conf.empty conf.cluster
      # cd conf.cluster
    2. conf.clusterをalternativesに登録する。
      # alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop-0.20/conf.cluster 50
      # alternatives --display hadoop-0.20-conf
    3. 自分のIPアドレスを確認する。(デフォルトでは、VMwareのDHCP機能で自動的にIPアドレスが割り当てられているから)
      # ifconfig
    4. /etc/hostsファイルに自分のホスト名を設定しておく。
      192.168.129.2   namenode.hadoop.hishidama.jp namenode
    5. conf.clusterの下の設定ファイルを編集する。
      ファイル名 設定例 備考
      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>
       
    6. NameNodeをフォーマットする。
      # mkdir -p /var/lib/hadoop-0.20/cache
      # chmod -R 1777 /var/lib/hadoop-0.20
      # su - hdfs
      $ hadoop namenode -format
      $ exit
    7. ファイヤーウォールを無効にしておく。
      1. CentOSのGUIの上部のメニューの「システム」→「管理」→「セキュリティレベルとファイヤーウォールの設定」で「セキュリティレベルの設定」ダイアログを開く。
      2. 「ファイアウォール」で「無効」を選択する。
    8. スリープしないようにしておく。[2011-11-03]
      1. CentOSのメニューバーの「システム」→「設定」→「他の個人設定」→「電源管理」で「電源管理の設定」ダイアログを開く。
      2. 「AC電源使用時」タブを選択する。
      3. 「アイドル状態になってからシステムがスリープするまでの時間(S)」を一番右の「しない」にセットする。
  4. VMware上のCentOSを一旦シャットダウンする。
  5. インストールしたCentOSのVMwareイメージのディレクトリーをコピーして、DataNode用とする。
    コピーしたディレクトリー内の拡張子「.vmx」のファイルをテキストエディターで開き、displayNameを変えておくと、後から分かりやすい。(VMware Playerを起動したときの一覧に表示される)
  6. DataNode用VMイメージの拡張子「.vmx」のファイルを実行する。
    「この仮想マシンは移動またはコピーされた可能性があります」と表示されたら、「コピーしました」を選択する。
  7. NameNode用の仮想マシンを実行し、NameNodeを起動する。
    # /etc/init.d/hadoop-0.20-namenode start
    # /etc/init.d/hadoop-0.20-jobtracker start
  8. DataNode用の仮想マシンを実行し、ホスト名を付ける。[2011-11-03]
    /etc/sysconfig/networkのホスト名を変更する。
    HOSTNAME=datanode01.hadoop.hishidama.jp
  9. ネームノードおよび全データノードの/etc/hostsに全データノードのIPアドレスとホスト名を追加する。[2011-11-03]
    192.168.129.3   datanode01.hadoop.hishidama.jp
    192.168.129.4   datanode02.hadoop.hishidama.jp
    192.168.129.5   datanode03.hadoop.hishidama.jp
  10. DataNodeを起動する。各データノードで以下のコマンドを実行する。
    # /etc/init.d/hadoop-0.20-datanode start
    # /etc/init.d/hadoop-0.20-tasktracker start
  11. Hadoopの各デーモンの自動起動を設定する。[2011-11-03]
    1. CentOSのメニューバーの「システム」→「管理」→「サービス」で「サービスの設定」ダイアログを開く。
    2. 「バックグラウンドのサービス(B)」タブを選択する。
    3. 左側にサービス(デーモン)の一覧があるので、マシン起動時に自動的に実行したいサービスにチェックを付ける。
      サービス名 ネームノード データノード
      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]

hadoop-start.bat:

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ファイルにもスペース入りの名前を使ってしまったので、パスはダブルクォーテーションで囲む。


Hadoop目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま