Fork me on GitHub

Hadoop Windows上での実行(0.16.3)

  • Oct 27, 2010

categoryプラグインは存在しません。

Windowsはまだサポートしていないと書いてありましたが、Cygwin用のコードは入っていますし、Javaですから起動さえできれば使えました。

環境

  • Windows Vista Enterprise SP1
  • Apache Hadoop 0.16.3
  • JDK 1.6.0_05

手順

インストール

  • Cygwinをインストール
  • Cygwinの/binにパスを通す
  • JAVA_HOMEを設定しておく
  • Hadoopを任意の場所に展開

Standaloneサンプルの実行

  • conf/hadoop-site.xmlを以下のように空にする
<configuration>
</configuration>
  • Hadoopを展開したフォルダで以下のように実行
mkdir input
cp conf/*.xml input
bash bin/hadoop jar hadoop-0.16.1-examples.jar wordcount input output
cat output/*

1台のPC上で、DFS, jobtrackerを使って実行

  • conf/hadoop-site.xmlを以下のように変更。

複数マシンで実行する場合は、NameNode側の設定とDataNode側の設定を同じにすること。つまり、localhost等とはかかず、マシン名やIPアドレス指定にする。

<configuration>
 <property>
   <name>fs.default.name</name>
   <value>localhost:9000</value>
 </property>
 <property>
   <name>mapred.job.tracker</name>
   <value>localhost:9001</value>
 </property>
 <property>
   <name>dfs.replication</name>
   <value>1</value>
 </property>
</configuration>
  • 以下のようにデーモンを起動。Vistaの場合は管理者権限で実行する必要がある。
bash bin/hadoop namenode -format
start bash bin/hadoop namenode
start bash bin/hadoop datanode
start bash bin/hadoop jobtracker
start bash bin/hadoop tasktracker
  • 以下のようにexampleを実行
bash bin/hadoop dfs -mkdir input
bash bin/hadoop dfs -put conf/hadoop-default.xml input
bash bin/hadoop jar hadoop-0.16.1-examples.jar wordcount input output
bash bin/hadoop dfs -cat output/*

以下のページから、DFSとMap/Reduceの実行状況が確認できる

http://localhost:50070/
http://localhost:50030/

複数台のPC上で実行

複数台利用する場合は、マスタとするPC上で、

start bash bin/hadoop namenode
start bash bin/hadoop jobtracker

と実行し、その他のデータノードを実行するPC上で、

start bash bin/hadoop datanode
start bash bin/hadoop tasktracker

と実行する。

サービス化

パッチを当てる

Namenode, Jobtrackerはそのままではユーザ名の取得でエラーになってしまい起動できないので、

org.apache.hadoop.security.UnixUserGroupInformation#getUnixUserName()

を、

 static String getUnixUserName() throws IOException \{
   String[] result = executeShellCommand(
       new String[]\{Shell.USER_NAME_COMMAND\});
   return toString(result);
 \}

のように変更して、jarにパッチを当てておく。#以前のパッチは、ユーザ名に改行が入ってしまっていたので、修正。

設定変更

hadoop-site.xmlに以下の設定を追加。

<property>
 <name>hadoop.tmp.dir</name>
 <value>/tmp/hadoop</value>
 <description>ユーザによって作業ディレクトリが変わらないように</description>
</property>
<property>
 <name>dfs.permissions</name>
 <value>false</value>
 <description>Jobをシステム以外のユーザが投入できるように</description>
</property>

サービス登録

master上で、以下のように実行して、サービスをインストールする。

cygrunsrv --install HadoopNamenode --path c:\cygwin\bin\bash.exe --chdir c:\hadoop --args "bin/hadoop namenode"
cygrunsrv --install HadoopJobtracker --path c:\cygwin\bin\bash.exe --chdir c:\hadoop --args "bin/hadoop jobtracker"

slave上で、以下のようにサービスをインストールする。

cygrunsrv --install HadoopDatanode --path c:\cygwin\bin\bash.exe --chdir c:\hadoop --args "bin/hadoop datanode"
cygrunsrv --install HadoopTasktracker --path c:\cygwin\bin\bash.exe --chdir c:\hadoop --args "bin/hadoop tasktracker"

あとはそれぞれのサービスを起動すれば良い。

Windowsファイアウォール等が有効になっている場合は、ブロック確認を行う必要があるため、初回起動時はサービスではなく、コマンドラインから起動したほうが良い。