S-JIS[2011-11-20] 変更履歴

Hadoop0.23 Windows

Hadoop0.23をWindowsへインストールしてみる。


Windows7へのインストール

Hadoop0.23の環境構築ドキュメントからはWindowsやCygwinという言葉が消えたので、もはやWindows上で動かすのは諦めた方がいいかもしれないが、一応やってみる^^;

  1. Cygwinをインストールしておく。
  2. アーカイブファイルをダウンロードしてくる。
  3. アーカイブを展開する。Cygwin(bash)で以下のコマンドを実行する。
    (Hadoop0.23はシンボリックリンクを使っているので、それに対応した解凍ツールを使う必要あり)
    $ cd /usr/local
    $ tar xf $(cygpath -u "C:\Users\hishidama\Downloads\hadoop-0.23.0.tar.gz")
    $ tar xf $(cygpath -u "C:\Users\hishidama\Downloads\hadoop-0.23.0-src.tar.gz") ←ついでにソースも
  4. Hadoop0.23はjarファイルをUNIXのシンボリックリンクで別ファイルにリンクしているものがあり、Cygwin(tar)のバージョンによってはリンクがおかしくなることがある。
    おかしなリンクを見つけたら、自分でリンクを張り直す。
    $ cd /usr/local/hadoop-0.23.0/share/hadoop/common/lib
    $ ls -l
    $ ln -sf ../../../../modules/hadoop-mapreduce-client-app-0.23.0.jar hadoop-mapreduce-client-app-0.23.0.jar
  5. Windowsの環境変数を設定する。
    HADOOP_COMMON_HOME D:/cygwin/usr/local/hadoop-0.23.0
    HADOOP_HDFS_HOME %HADOOP_COMMON_HOME%
    HADOOP_MAPRED_HOME %HADOOP_COMMON_HOME%
    HADOOP_CONF_DIR %HADOOP_COMMON_HOME%/conf
    ※HADOOP_HOMEは使われなくなった(非推奨になった)
    ※HADOOP_CONF_DIRは従来のバージョンでも使っているので、複数バージョンを使い分けたい場合は注意
  6. Cygwin(bash)の環境変数を設定する。~/.bashrcの最後尾に以下のコマンドを追加する。
    export JAVA_HOME=$(cygpath -u "$JAVA_HOME")
    export HADOOP_COMMON_HOME=$(cygpath -u "$HADOOP_COMMON_HOME")
    export HADOOP_HDFS_HOME=$(cygpath -u "$HADOOP_HDFS_HOME")
    export HADOOP_MAPRED_HOME=$(cygpath -u "$HADOOP_MAPRED_HOME")
    export HADOOP_CONF_DIR=$(cygpath -u "$HADOOP_CONF_DIR")
  7. 動作確認してみる。Cygwin(bash)を再起動して以下のコマンドを実行してみる。
    $ cd $HADOOP_COMMON_HOME
    $ bin/yarn
    $ bin/yarn classpath
    $ bin/yarn version
    $ bin/yarn jar hadoop-mapreduce-examples-0.23.0.jar pi 4 2000

デフォルトのHADOOP_CONF_DIRが単独環境用(Hadoopのデーモンを動かす必要が無い)ということは変わっていないようだ。
従来のMapReduceプログラム(円周率算出サンプルとか)はそのまま実行できる。


Eclipseの設定

EclipseでHadoop0.23のソースを見られるようにしてみる。

  1. Eclipseのワークスペース上にHadoop0.23用のJavaプロジェクトを作成する。
  2. ビルドパスにHadoop0.23のライブラリー(jarファイル)を追加する。
    %HADOOP_COMMON_HOME%\share\hadoop\common hadoop-common-0.23.0.jar  
    %HADOOP_COMMON_HOME%\share\hadoop\common\lib *.jar ただし、シンボリックリンクになっているもの(ファイルサイズが1kB以下)は除く。
    (WindowsのEclipseはシンボリックリンクに対応していないので、jarファイルとして読み込もうとしてエラーになる)
    %HADOOP_HDFS_HOME%\share\hadoop\hdfs hadoop-hdfs-0.23.0.jar  
    %HADOOP_HDFS_HOME%\share\hadoop\hdfs\lib *.jar  
    %HADOOP_COMMON_HOME%\modules *.jar common/libからのシンボリックリンクはこちらを指している。
  3. ソースを添付する場合は、common直下とhdfs直下のjarファイルは同じ場所の「〜sources.jar」を指定する。
    それ以外はソースのアーカイブを展開したディレクトリー(D:/cygwin/usr/local/hadoop-0.23.0-src)を指定する。

WordCountサンプル

従来のHadoopのWordCountのソースをそのままコンパイルして実行したら、ちゃんと動いた。

APIは、Jobのインスタンス化の方法が変わっただけのようだ。
(コンストラクターの直接呼び出し(new Job())が非推奨になった)

	Job job = new Job(conf, "wordcount23");
↓
	Job job = Job.getInstance(conf, "wordcount23");

ソース全体


このWordCountは、EclipseのJavaプロジェクトのビルドパスにHadoop0.23のjarファイルをごっそり追加しているので、Eclipse上から直接実行できる。

  1. ワークスペースのJavaプロジェクト内に入力データを作っておく。
    例:「プロジェクト/data/input/test.txt」
  2. 一旦プログラムを実行する。→入出力のパスが指定されていないので例外が発生する。
  3. 実行時引数に「data/input data/output」を指定して、再度実行する。
  4. 「プロジェクト/data/output/part-r-00000」が出来ていればOK。

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