S-JIS[2013-08-31] 変更履歴

Hadoop2.1

Hadoop2.1.0-betaをインストールしてみる。

 

Windows7へのインストール

Hadoop2.1.0-betaはWindowsに対応したらしいので、Windows7にインストールしてみる。

  1. Apache Hadoopのダウンロードサイトからアーカイブ(hadoop-2.1.0-beta.tar.gz)をダウンロードする。
  2. ダウンロードしたアーカイブを適当な場所に解凍する。(D:\hadoop-2.1.0-beta)

インストールした場所のbinの下を見てみると、拡張子がcmdのファイル(バッチファイル)がある。
ちょっと中を見てみたが、バッチファイルに詳しい人がかなりしっかり書いた感じ(笑)

以前のHadoopと異なり、Cygwinは不要


環境設定

環境変数JAVA_HOMEを指定する。
(HADOOP_HOME等は指定する必要が無い。むしろ古いバージョンの環境変数が残っているとまずいので、消すべき)

set JAVA_HOME=C:\Java\jdk1.7.0_04

空白入りのパスは駄目。つまり標準の場所にインストールしたJavaは使えない。
また、ダブルクォーテーションで囲んではいけない。

JAVA_HOMEの設定にまつわるエラー
概要 設定内容 エラーメッセージ
空白入りのパス 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の設定を変えたりしてみたが、エラーは変わらないので、場所の問題ではないような気がする。


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