Hadoop0.20のインストールおよび環境設定・動作確認。
|
参考: クイックスタート
HadoopはUNIXを想定しているようなので、Windowsで試す為にはCygwinが必要。
sshが必要なので、CygwinのOpenSSHもダウンロードして設定しておく。
(単独環境で動作させるだけならsshは不要)
HadoopはJavaで動くので、JDK1.6もインストールしておく。
作業内容 | 設定内容・実施コマンド | 備考 | |
---|---|---|---|
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のシェルがスペース入りの名前に対応していない為、
シンボリックリンクを作ってそのディレクトリー名を指定する。
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 cat output/*
|
「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プロトコル(すなわちマシンローカルのパス)として認識されるのだろう。