S-JIS[2010-08-29] 変更履歴

Hadoop0.20

Hadoop0.20のインストールおよび環境設定・動作確認。


WindowsXPへのインストール

参考: クイックスタート

HadoopはUNIXを想定しているようなので、Windowsで試す為にはCygwinが必要。
sshが必要なので、CygwinのOpenSSHダウンロードして設定しておく。 (単独環境で動作させるだけならsshは不要)

HadoopはJavaで動くので、JDK1.6もインストールしておく。

  1. Hadoop Common リリースの 「今すぐダウンロードする」を選択してダウンロードページを開く。
  2. ダウンロードページから適当にミラーサイトを選んで、アーカイブをダウンロードする。(hadoop-0.20.1.tar.gz)
  3. 適当な場所にアーカイブを展開する。(C:\temp\hadoop-0.20.1\〜)
  4. 展開したディレクトリーをCygwinのディレクトリーに移動する。(C:\cygwin\usr\local\hadoop-0.20.1\〜)
    (Cygwin(bash)から、/usr/local/hadoop-0.20.1/でアクセスできるようになる)
    以降、C:\cygwin\usr\local\hadoop-0.20.1をHADOOP_HOMEと呼ぶことにする。

Hadoopの環境設定

  作業内容 設定内容・実施コマンド 備考
1 シンボリックリンクを作っておく。
ln -s /usr/local/hadoop-0.20.1 /usr/local/hadoop
ln -s "/cygdrive/c/Program Files/Java/jdk1.6.0_13" /usr/local/jdk1.6
Cygwin(bash)から実行。
2 C:\cygwin\usr\local\hadoop-0.20.1\conf\hadoop-env.sh
を編集する。
export JAVA_HOME=/usr/local/jdk1.6
環境変数JAVA_HOMEの設定。
export HADOOP_IDENT_STRING=$HOSTNAME
HBaseの設定の真似
3 hadoopコマンドを実行してみる。
Usageが表示されればOK!
/usr/local/hadoop/bin/hadoop
Cygwin(bash)から実行。

HBaseのhbase-env.shだと JAVA_HOMEにスペース入りのディレクトリー名を設定しても大丈夫なのだが、
Hadoopは後で使用する/bin/hadoopのシェルがスペース入りの名前に対応していない為、
シンボリックリンクを作ってそのディレクトリー名を指定する。


Hadoop単独環境の動作確認

Windows上の単独環境(スタンドアローン・非分散環境)で試してみる。

単独環境は通常のマシンのファイルシステムをそのまま使うので、HDFS(Hadoop Distributed File System:Hadoop分散ファイルシステム)は使わない。
設定ファイル(HADOOP_HOME/confの下のxmlファイル)はデフォルトで単独環境用なので、特にいじる必要は無いらしい。

サンプルを実行する為の設定
  作業内容 設定内容・実施コマンド 備考
1 入力ディレクトリーを作成する。
mkdir -p /home/hadoop/example
cd /home/hadoop/example
mkdir input
 
2 サンプルで入力とするファイルを用意する。
cp -p /usr/local/hadoop/conf/*.xml input/
テキストファイルであれば何でもよい。
3 サンプルを実行してみる。
/usr/local/hadoop/bin/hadoop jar \
$(cygpath -w /usr/local/hadoop/hadoop-*-examples.jar) \
grep input output 'dfs[a-z.]+'
ずらずらとINFOログがいっぱい出る。
再実行する際はoutput/を削除しておくこと。
rm -r output/
4 outputディレクトリーが作られ、
その中に結果ファイルが作られる。
ls -l output/
total 1
-rwx------+ 1 hishidama なし 11 2010-02-21 04:34 part-00000
cat output/*

1     dfsadmin

「dfs」で始まる単語の個数が表示されるらしい。

HADOOP_HOME/bin/hadoopシェルのjarコマンドではjarファイル等を指定するが、Cygwinから実行する場合(すわなちWindowsで実行する場合)、
(ローカルシステムの)ファイル・ディレクトリーの場所はWindowsのパスで指定する必要がある。[2010-02-23]
(相対パス形式ならWindowsでもUNIXでも同じなので、問題ない)

UNIX形式の絶対パスで指定すると、以下のように例外が発生する。

$ /usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
Exception in thread "main" java.io.IOException: Error opening job jar: /usr/local/hadoop/hadoop-0.20.1-examples.jar
        at org.apache.hadoop.util.RunJar.main(RunJar.java:90)
Caused by: java.io.FileNotFoundException: \usr\local\hadoop\hadoop-0.20.1-examples.jar (指定されたパスが見つかりません。)
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.(ZipFile.java:114)
        at java.util.jar.JarFile.(JarFile.java:133)
        at java.util.jar.JarFile.(JarFile.java:70)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:88)

これは、入力ディレクトリーや出力ディレクトリーについても同様。

$ /usr/local/hadoop/bin/hadoop jar $(cygpath -w /usr/local/hadoop/hadoop-*-examples.jar) grep \
> /home/hadoop/example/input /home/hadoop/example/output 'dfs[a-z.]+'
2010/02/23 23:10:03 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/home/hadoop/example/input
        at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:190)
〜
        at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

「file:/home〜」と表示されているが、これはたぶんローカルファイルを示すURI(URIクラスのインスタンス)だろう。
したがって実行するOSのパス指定でなければならず、すわなちUNIX形式の(Cygwinの)絶対パスはWindows上では見つけられない。

Cygwinの独自コマンドcygpathを使って Windows形式のパスに変換して指定すればOK。

$ /usr/local/hadoop/bin/hadoop jar $(cygpath -w /usr/local/hadoop/hadoop-*-examples.jar) grep \
> $(cygpath -w /home/hadoop/example/input) $(cygpath -w /home/hadoop/example/output) 'dfs[a-z.]+'

※たぶん、hadoopでパスを指定する際は、URI形式で書かない場合は(単独環境では)fileプロトコル(すなわちマシンローカルのパス)として認識されるのだろう。


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