Hadoop2.1.0-betaをインストールしてみる。
Hadoop2.1.0-betaはWindowsに対応したらしいので、Windows7にインストールしてみる。
インストールした場所のbinの下を見てみると、拡張子がcmdのファイル(バッチファイル)がある。
ちょっと中を見てみたが、バッチファイルに詳しい人がかなりしっかり書いた感じ(笑)
環境変数JAVA_HOMEを指定する。
(HADOOP_HOME等は指定する必要が無い。むしろ古いバージョンの環境変数が残っているとまずいので、消すべき)
set JAVA_HOME=C:\Java\jdk1.7.0_04
空白入りのパスは駄目。つまり標準の場所にインストールしたJavaは使えない。
また、ダブルクォーテーションで囲んではいけない。
概要 | 設定内容 | エラーメッセージ |
---|---|---|
空白入りのパス | set JAVA_HOME=C:\Program Files
(x86)\Java\jdk1.7.0_04 |
'Files' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 Error: JAVA_HOME is incorrectly set. Please update D:\hadoop2.1.0\hadoop-2.1.0-beta\conf\hadoop-env.cmd |
set JAVA_HOME="C:\Program Files
(x86)\Java\jdk1.7.0_04" |
'C:\Program' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 |
|
ダブルクォーテーション | set JAVA_HOME="C:\Java\jdk1.7.0_04" |
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。 |
D:\hadoop-2.1.0-beta>bin\hadoop Usage: hadoop [--config confdir] COMMAND where COMMAND is one of: fs run a generic filesystem user client version print the version jar <jar> run a jar file distcp <srcurl> <desturl> copy file or directories recursively archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive classpath prints the class path needed to get the Hadoop jar and the required libraries daemonlog get/set the log level for each daemon or CLASSNAME run the class named CLASSNAME Most commands print help when invoked w/o parameters.
D:\hadoop-2.1.0-beta>bin\hadoop version Hadoop 2.1.0-beta Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1514472 Compiled by hortonmu on 2013-08-15T20:48Z Compiled with protoc 2.5.0 From source with checksum 8d753df8229fd48437b976c5c77e80a This command was run using /D:/hadoop-2.1.0-beta/share/hadoop/common/hadoop-common-2.1.0-beta.jar
D:\hadoop-2.1.0-beta>bin\hadoop jar share\hadoop\mapreduce\hadoop-mapreduce-examples-2.1.0-beta.jar pi 4 1000 Number of Maps = 4 Samples per Map = 1000 13/08/31 01:19:09 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 13/08/31 01:19:09 ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable D:\hadoop-2.1.0-beta\bin\winutils.exe in the Hadoop binaries. at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:272) at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:294) at org.apache.hadoop.util.Shell.(Shell.java:287) at org.apache.hadoop.util.StringUtils. (StringUtils.java:76) 〜
bin\winutils.exeが無いというエラーになった。
実際、binの下にexeファイルは無い。
ちなみにHDP(Hortonworks Data Platform 1.1)のbinの下にwinutils.exeがあったので、コピーしてきてから再実行すると、別のエラーになった。
(なお、winutils.exeを動かす為には、VC++2010再頒布可能パッケージ(x64)がインストールされている必要がある)
D:\hadoop-2.1.0-beta>bin\hadoop jar share\hadoop\mapreduce\hadoop-mapreduce-examples-2.1.0-beta.jar pi 4 1000
Number of Maps = 4
Samples per Map = 1000
13/08/31 01:34:43 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Starting Job
〜
13/08/31 01:34:45 INFO mapreduce.JobSubmitter: Cleaning up the staging area file:/tmp/hadoop-hishidama/mapred/staging/hishidama901788948/.staging/job_local901788948_0001
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:423)
at org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:933)
at org.apache.hadoop.util.DiskChecker.checkAccessByFileMethods(DiskChecker.java:177)
at org.apache.hadoop.util.DiskChecker.checkDirAccess(DiskChecker.java:164)
〜
UnsatisfiedLinkErrorというエラーが出ているということは、JNIのエラーだろう。
ソースを見ると、access0というメソッドはnativeメソッドなので、DLLファイルがロードされていないと思われる。
と思ってDLLをロードしている箇所を探したら、ロードするのはNativeCodeLoaderらしい。
って、よく見るとnative-hadoop libraryがロードできないという警告メッセージが出てるやんけ^^;
どうやら「hadoop.dll
」が必要らしいが、これまた存在してない。
(lib\nativeの下に、libhadoop.so
とかのUNIX用のJNIのファイルはあるのだが)
これもHDPにあったのでコピーしてみたが、エラーは変わらず…。
DLLファイルを置く場所が悪いのかと思って置き場所やjava.library.pathの設定を変えたりしてみたが、エラーは変わらないので、場所の問題ではないような気がする。