Hadoop >

note.pngDEPRECATED!: この内容は陳腐化しています。ご利用は非推奨です。Hadoop0.20セットアップをご参照ください。

他のバージョンのセットアップ

  1. Hadoop0.23(次世代MapReduce、YARN)
  2. HadoopWithSecurity
  3. Hadoop1.0
  4. Hadoop0.20セットアップ(旧)
  5. Hadoop0.19まで

目次

配布パッケージ

事前セットアップ(各ノード)

  1. 依存パッケージをインストールします(以下、例はdebian環境にて)。JDKについては、OpenJDK(openjdk-6-jdk)でもその他のJDKでも構いません。
    # aptitude install ssh rsync sun-java6-jdk
  2. 実行ユーザ(hadoop)を追加します。
    # adduser --shell /bin/sh --uid 10001 --disabled-password hadoop
  3. 実行ユーザのパスフレーズなしキーペアを作成します。残りのノードには同じキーペアを配備します。ただし、後述のスタンドアロンモードではこれらは不要です。NameNode を起動させるマシン*1から各ノード(自ホストも含めて)にSSHでログインできることを確認しておきます。
    # su hadoop
    $ cd ~/
    $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
    $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  4. 配布パッケージを展開し適当なところに配備します。
    $ cd /usr/local
    $ ls -la
    lrwxrwxrwx  1 root   staff       15 2009-12-05 21:30 hadoop -> ./hadoop-0.20.1
    drwxr-xr-x 11 hadoop hadoop    4096 2009-11-20 09:31 hadoop-0.20.1
  5. hadoopの環境変数を設定します(${HADOOP_HOME}/conf/hadoop-env.sh)。
    1. export JAVA_HOME=/usr/lib/jvm/java-1.6.0-sun
    2.  
    3. # サーバモードで起動するようにします。
    4. # ※Apache Commons Daemon の Jsvcツールを使用して DataNode を起動している場合には
    5. # エラーになります。(たとえば、Yahoo! Distribution of Hadoop の場合など)
    6. # Extra Java runtime options.  Empty by default.
    7. export HADOOP_OPTS=-server
    8.  
    9. # デフォルトの /tmp では不適切なので、/var/run 以下などに変更します。
    10. # The directory where pid files are stored. /tmp by default.
    11. export HADOOP_PID_DIR=/var/run/hadoop

3つの動作モードとその設定

  • Hadoopの動作モードには、スタンドアロン疑似分散完全分散という3つがあります。スタンドアロンが最も簡便ですが、動作を理解する上では開発には疑似分散を、もちろん商用には完全分散を使用するとよいでしょう。各モードの設定は以下の通りです。

スタンドアロンモード

割愛

疑似分散モード(シングルノード)

 1機で分散処理環境を起動させます。プライマリNameNode/JobTracker、セカンダリNameNodeDataNode/TaskTrackerの各インスタンスが起動します。※以下、hadoop 起動ユーザ(HDFSのスーパーユーザ)である hadoop によるコマンド実行は、プロンプト # で示します。

  1. 前節の事前セットアップを行います。
  2. Hadoopの3つの設定ファイルを以下のように編集します。
    1. ${HADOOP_HOME}/conf/core-site.xml(主要設定ファイル)
      1. <configuration>
      2.     <property>
      3.         <name>fs.default.name</name>
      4.         <value>localhost:9000</value>
      5.         <description>プライマリNameNodeを設定</description>
      6.     </property>
      7. </configuration>
    2. ${HADOOP_HOME}/conf/hdfs-site.xml分散ファイルシステムの設定ファイル)
      1. <configuration>
      2.     <property>
      3.         <name>dfs.replication</name>
      4.         <value>1</value>
      5.         <description>DataNodeはlocalhostのみなので、レプリケーション数は1</description>
      6.     </property>
      7. </configuration>
    3. ${HADOOP_HOME}/conf/mapred-site.xmlMapReduce実行環境の設定ファイル)
      1. <configuration>
      2.     <property>
      3.         <name>mapred.job.tracker</name>
      4.         <value>localhost:9001</value>
      5.         <description>JobTrackerを設定</description>
      6.     </property>
      7. </configuration>
  3. 新規ファイルシステムをフォーマットします。
    hadoop@namenode01# bin/hadoop namenode -format
  4. hadoopデーモンを起動します。
    hadoop@namenode01# bin/start-all.sh
    1. Web管理ツールへのアクセス
  5. hadoopデーモンの停止
    hadoop@namenode01# bin/stop-all.sh

完全分散モード(マルチノード)

 以下の設定例では、クラスタを4機で構成し、1機をプライマリNameNode(namenode01)とし、もう1機をセカンダリNameNode(namenode02)とし、残りの2機をDataNode(datanode01、datanode02)とします。また、NameNode クラスタでは、障害時に Heartbeat などで仮想IPアドレス(namenode)の引継ぎが行われる前提とします。※以下、hadoop 起動ユーザ(HDFSのスーパーユーザ)である hadoop によるコマンド実行は、プロンプト # で示します。

  1. 各ノードで上記の事前セットアップを行います。
  2. 各ノードで Hadoop の3つの設定ファイルを以下のように編集します。Hadoop は、各ノードで同一の設定ファイルセットを使えるように設計されており、クラスタのセットアップを容易にしています。fs.default.name と mapred.job.tracker には、FQDNで指定します。設定ファイル中の ${user.name} は、サーバプロセスオーナーのユーザIDとなりますので、通常の起動ユーザである hadoop になります。hadoop.tmp.dir を /tmp 配下以外にした場合には、起動ユーザで書き込み可能であることを確認することも忘れないでください。以下の例では、hadoop.tmp.dir を user.name を用いて設定していますので、/var/local/hadoop/cache をフルアクセスで作成し、sticky bin を立てて(パーミッション 1777)おいてもよいでしょう。
    1. ${HADOOP_HOME}/conf/core-site.xml
      1. <configuration>
      2.     <property>
      3.         <name>hadoop.tmp.dir</name>
      4.         <value>/var/local/hadoop/cache/${user.name}</value>
      5.         <description>
      6.             他の一時保存領域指定のためのベースディレクトリ。
      7.             デフォルトでは、/tmp/hadoop-${user.name} になります。
      8.             OS再起動後もデータが永続化されるロケーションに変更します。
      9.             ※参考までに、Cloudera配布版では、/var/lib/hadoop-VERSION/cache/${user.name}
      10.             となっています。
      11.             【注意】ただし、この設定を変更すると、mapred-site.xml の mapred.system.dir も
      12.             影響を受けますので、該当ディレクトリがHDFS上に作成されます。
      13.         </description>
      14.     </property>
      15.     <property>
      16.         <name>fs.default.name</name>
      17.         <value>hdfs://namenode.example.com:9000</value>
      18.         <description>NameNodeを仮想IPアドレスのFQDNで設定</description>
      19.     </property>
      20. </configuration>
    2. ${HADOOP_HOME}/conf/hdfs-site.xml: ※ dfs.http.address の設定については、Cloudera の Multi-host SecondaryNameNode Configuration が参考になります。
      1. <configuration>
      2.     <property>
      3.         <name>dfs.replication</name>
      4.         <value>2</value>
      5.         <description>DataNodeが2なので、レプリケーション数も2とします</description>
      6.     </property>
      7.     <property>
      8.         <name>dfs.hosts</name>
      9.         <value>${hadoop.tmp.dir}/hosts.include</value>
      10.         <description>
      11.            NameNodeへの接続を許可するノードのリストを記述したファイルのフルパスを
      12.            記述します。
      13.         </description>
      14.     </property>
      15.     <property>
      16.         <name>dfs.hosts.exclude</name>
      17.         <value>${hadoop.tmp.dir}/hosts.exclude</value>
      18.         <description>
      19.            NameNodeへの接続を拒否するノードのリストを記述したファイルのフルパスを
      20.            記述します。
      21.         </description>
      22.     </property>
      23.     <property>
      24.         <name>dfs.http.address</name>
      25.         <value>namenode.example.com:50070</value>
      26.         <description>
      27.            SecondaryNameNode デーモンを NameNode 以外のノードでも動作させる場合には
      28.            この設定によるデフォルトの上書きが必要です。
      29.         </description>
      30.     </property>
      31.     <property>
      32.         <name>dfs.name.dir</name>
      33.         <value>${hadoop.tmp.dir}/dfs/name,/export/home/hadoop/dfs/name</value>
      34.         <description>
      35.             NameNode 格納ディレクトリ(ローカルファイルシステム上)。
      36.             デフォルトでは、/tmp/hadoop-${user.name}/dfs/name になりますので、OS再起動も
      37.             データが永続化されるロケーションに変更しておきます。
      38.             複数指定できますので、もう一つは堅牢性の高い共有ストレージにしておくとよいでしょう。
      39.             ※参考までに、Cloudera配布版では、/var/lib/hadoop-VERSION/cache/${user.name}/dfs/name
      40.             となっています。
      41.         </description>
      42.     </property>
      43.     <!--
      44.         データ保存領域などを個別に設定したい場合には、以下の項目などを設定します。
      45.         永続化ロケーションに変更したい場合には、上記の core-site.xml の hadoop.tmp.dir で
      46.         一括変更できます。
      47.     <property>
      48.         <name>dfs.data.dir</name>
      49.         <value>/var/local/hadoop/cache/${user.name}/dfs/data</value>
      50.         <description>
      51.             DataNode 格納ディレクトリ(ローカルファイルシステム上)。
      52.             デフォルトでは、/tmp/hadoop-${user.name}/dfs/name になりますので、
      53.             OS再起動の可能性がある環境では永続化されるロケーションに変更しておきます。
      54.             通常はクラスタ全体が停止することはないので、/tmp 以下でよいのでしょう。
      55.             ※参考までに、Cloudera配布版では、/var/lib/hadoop-VERSION/cache/${user.name}/dfs/data
      56.             となっています。
      57.         </description>
      58.     </property>
      59.     -->
      60. </configuration>
    3. ${HADOOP_HOME}/conf/mapred-site.xml
      1. <configuration>
      2.     <property>
      3.         <name>mapred.job.tracker</name>
      4.         <value>namenode.example.com:9001</value>
      5.         <description>JobTrackerを仮想IPアドレスのFQDNで設定</description>
      6.     </property>
      7.     <property>
      8.         <name>mapred.hosts</name>
      9.         <value>${hadoop.tmp.dir}/hosts.include</value>
      10.         <description>
      11.            JobTrackerへの接続を許可するノードのリストを記述したファイルのフルパスを
      12.            記述します。
      13.         </description>
      14.     </property>
      15.     <property>
      16.         <name>mapred.hosts.exclude</name>
      17.         <value>${hadoop.tmp.dir}/hosts.exclude</value>
      18.         <description>
      19.            JobTrackerへの接続を拒否するノードのリストを記述したファイルのフルパスを
      20.            記述します。
      21.         </description>
      22.     </property>
      23.     <!--
      24.         ジョブ実行のための作業ファイル保存領域などを変更したい場合には、
      25.         以下のような設定項目を個別に変更します。
      26.     <property>
      27.         <name>mapred.system.dir</name>
      28.         <value>/var/local/hadoop/cache/${user.name}/mapred/system</value>
      29.         <description>
      30.             Map-Reduceフレームワークがジョブ実行のためのシステムファイルを格納するディレクトリ。
      31.             HDFS上のパスで、サーバとクライアントともにアクセス可能である必要があります。
      32.             なお、デフォルトの値は、/tmp/hadoop-${user.name}/mapred/system です。
      33.             ※参考までに、Cloudera配布版では、/var/lib/hadoop-VERSION/cache/${user.name}/mapred/system
      34.             となっています。
      35.         </description>
      36.     </property>
      37.     -->
      38. </configuration>
  3. NameNode以下の設定を行います。NameNode障害時に、セカンダリNameNodeをプライマリNameNodeに昇格させて運用する場合には、セカンダリNameNodeにも同様の設定ファイルを配備しておきます。
    1. ${HADOOP_HOME}/conf/masters にセカンダリNameNodeを追加します。これで、プライマリNameNode、セカンダリNameNode両マシンで、SecondaryNameNode デーモンを起動させることができます。
      namenode01.example.com
      namenode02.example.com
    2. ${HADOOP_HOME}/conf/slaves に、Hadoopの制御スクリプトでその起動と停止をコントロールしたいDataNodeを追加します。通常、すべてのDataNodeを対象とします。※SSHでログイン可能なホスト名を記述する必要があります。
      datanode01.example.com
      datanode02.example.com
    3. NameNode および JobTracker に接続を許可するノードをリストしたファイルを作成します。この例では、${hadoop.tmp.dir}/hosts.include になります。クラスタの最初のセットアップでは、すべてのDataNodeが対象となります。
      datanode01.example.com
      datanode02.example.com
    4. 新規ファイルシステムをフォーマットします。
      hadoop@namenode01# bin/hadoop namenode -format
    5. Hadoopデーモンを起動します。
      1. Hadoop DFSの起動: 次のスクリプト実行で、プライマリNameNodeではNameNodeデーモンが起動し、セカンダリNameNodeではSSH経由でSecondaryNameNodeデーモンが起動され、残りの各ノードではSSH経由でDataNodeデーモンが起動されます。
        hadoop@namenode01# bin/start-dfs.sh
        プライマリNameNode
        hadoop@namenode01# jps
        4266 NameNode
        4296 SecondaryNameNode
        セカンダリNameNode
        hadoop@namenode02# jps
        1711 SecondaryNameNode
        DataNode
        hadoop@datanode01# jps
        2285 DataNode
      2. Hadoop Map/Reduceの起動: 次のスクリプト実行で、プライマリNameNodeではJobTrackerデーモンが起動し、残りの各DataNodeではSSH経由でTaskTrackerデーモンが起動されます。
        hadoop@namenode01# bin/start-mapred.sh
        プライマリNameNode
        hadoop@namenode01# jps
        4266 NameNode
        4296 SecondaryNameNode
        4689 JobTracker
        セカンダリNameNode
        hadoop@namenode02# jps
        1711 SecondaryNameNode
        DataNode
        hadoop@datanode01# jps
        2285 DataNode
        2440 TaskTracker
      3. 利用方法は、シングルノードの場合と同様です。
    6. hadoopデーモンの停止
      hadoop@namenode01# bin/stop-mapred.sh
      hadoop@namenode01# bin/stop-dfs.sh

簡易起動スクリプト

  • こちらのスクリプトで起動、停止を制御できます。スクリプトの中の変数は、適宜変更してください。
    # hadoop start
    # hadoop stop

HadoopTips


*1 セカンダリNameNodeをプライマリNameNodeに昇格させて運用する可能性がある場合にはそのマシンも

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-06-09 (土) 17:33:18 (3460d)