Windows上でHadoopを実行する方法はいくつかあるのですが、色々興味本位に試していたら、うっかりWindows上でHaoopをビルドしてしまったので、その備忘録。
何故ビルドしてしまったかというと、Windows上で実行するのに必要なバイナリ(EXE)がtarball に同梱されていなかったためです。たとえば、Windows上でHadoopが必要とするUNIX系コマンドは、winutils.exe という名前のユーティリティ経由で実行されるのですが、これがなかったためで、ビルドすること自体が目的になった感じです。
以前は、そのためCygwinが必須でしたが、現在のHadoop 2.2以降では、CygwinなしでHadoopが実行出来るようになってます(ただしビルド時に、chmod/rm などのgnuwin32系のコマンドが必要だったりします)。また、Hadoop 1.1系もWindowsで動く(HDInsight Emulatorとか)で、そちらもきちんとビルドできると思われます。
元となる情報は、
- Hadoop2OnWindows - Hadoop Wiki
- https://svn.apache.org/viewvc/hadoop/common/branches/branch-2/BUILDING.txt?view=markup
を参照すれば無問題かと思います。
2014/7/31 追記しました。
ビルド環境
初めにザックリと、必要な環境を列挙しますが、具体的にどうしたかは順次述べます。
- Windows System
- JDK 1.6+
- Maven 3.0 or later
- Findbugs 1.3.9 (if running findbugs)
- ProtocolBuffer 2.5.0
- Windows SDK or Visual Studio 2010 Professional
- Unix command-line tools from GnuWin32 or Cygwin: sh, mkdir, rm, cp, tar, gzip
- zlib headers (if building native code bindings for zlib)
- Internet connection for first build (to fetch all Maven and Hadoop dependencies)
findbugsは、実行してないので入れませんでした。
OS
ビルド環境として、以下のOSがサポートされてます。
- Windows Server 2008 / 2008 R2
- Windows Vista / 7
推奨はServer系です。最新のWindows 8 / Server 2012 / 2012R2系は Windows SDKのバージョンからかムリみたいな感じです。冒険するのも時間の無駄なので、さくっとAzureの仮想マシンに2008 R2 を起動して環境を作るのが楽かと思います。
今回は、Azure上のWindows 2008 R2 64bit 英語版 の仮想マシンで試しました。
Windows SDK
Windows バイナリのビルドには、Windows SDKもしくは、Visual Studioが必要です。ただし、Visual Studioの場合、2010 のみサポート、Expressはサポート外ですので注意しましょう。今回は、Windows SDK 7.1 を入れました。Windows SDKは以下からダウンロードして、インストールします。
JDK
JDK8ではなく、JDK7 64bit版の最新を入れました。(この時点で、jdk1.7.0_65)以下からダウンロードして普通にインストールします。
JAVA_HOME 環境変数の設定を忘れずに。
Maven
Maven をインストールします。最新は、3.3系ですが、これで試してみたらビルドに失敗したので、3.0系の最新である、3.0.5 をインストールしました。
インストール方法は、以下のブログに解説しててあるので、問題ないでしょう。
mvnコマンドが実行できるように、PATHを通しておいてください。
Unix コマンド系
実行には、Cygwin等いらないのですが、ビルドには何故かUnixコマンド的な何かが必要です。Cygwin or GnuWin32 とのことでしたで、ここではGnuWin32ベースのものをインストールしました。
* GnuWin32
上記から、以下の3つをインストールすればOKでした。
- CoreUtil ( ファイル操作系のコマンド一式が入っている)
- gzip
- tar
結局、のちにsh.exeとか、cygdriveに依存する部分が出てきてしまったので、cygwin64を入れて、PATHの最後に追加しました。
ZLIB
Zlibのバイナリとインクルードヘッダが必要です。テストされたバージョンは、1.2.7で、配布されている最新は1.2.8です。念のため1.2.7 と指定されたバージョンにしました。以下から、zlib-1.2.7-dll.zip をダウンロードして展開しましょう。
例えば、c:\zlib-1.2.7 に展開したとすると、そこをPATHに通しておきます。またZLIB_HOME環境変数に、展開したパスを設定しておきます。
あと、コンパイルにZlibのインクルード(*.h)が必要となります。Makefileとか修正するのとか面倒くさいので、
C:\Program Files\Microsoft SDKs\Windows\v7.1\Include
に、zlib.h / zconf.h を コピーしておけば大丈夫です。
ProtocolBuffer
Googleの提供しているProtocolBuffer2.5が必要となる。以下からダウンロード可能となるので、適宜展開しPATHにprotoc.exe が起動できるようにしておく。
これでツール類の事前準備は完了。
Platform環境変数
Platform環境変数に、x64 or Win32 のどちらかを定義します。x64 でビルドしているので、x64 を設定します。
set Platform = x64
このとき、"Platform" の文字列は、ケースセンシティブですと、BUILD.txtに書かれているので、注意してください。
Environment variables on Windows are usually case-insensitive, but Maven treats 220 them as case-sensitive.
Hadoop ソースの展開
Hadoopは、ApacheのWebページから2.4.1をダウンロードして展開します。Windowsだとパス長の問題があるので、比較的浅い位置(c:\hdc)とかに展開してください。
ビルド
Windows コマンドプロンプトではなく、Windows SDKのコマンドプロンプトを開きます。多分文字が黄色です。そこで、以下のように入力すれば、とりあえずビルド完了するでしょう。
mvn compile -Pnative-win
エラーが出たら、メッセージの指示にしたがって、-e パラメータを付けたりしてデバッグしながら、やればうまく行くはずです。私も何回か、Try & Errorでした。
で、以下ビルドした結果画像です。
これ以降はまた別の機会に。
で、最終的にバイナリ入りのtarballを作るには、
mvn package -Pdist,native-win -DskipTests -Dtar
を実行する必要があります。ビルドには、ちょっと時間がかかりますが、成功すると、
hadoop-dist\target\hadoop-2.4.1.tar.gz
が出来るはずです。Windows向けのバイナリも同梱されているでしょう。