Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

Windows上で、 Hadoop 2.4.1 をビルドする

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とか)で、そちらもきちんとビルドできると思われます。

元となる情報は、

を参照すれば無問題かと思います。

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を通しておいてください。

f:id:StateMachine:20140728175829p:plain

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でした。

で、以下ビルドした結果画像です。

f:id:StateMachine:20140728175845p:plain

これ以降はまた別の機会に。

で、最終的にバイナリ入りのtarballを作るには、

mvn package -Pdist,native-win -DskipTests -Dtar

を実行する必要があります。ビルドには、ちょっと時間がかかりますが、成功すると、

hadoop-dist\target\hadoop-2.4.1.tar.gz

が出来るはずです。Windows向けのバイナリも同梱されているでしょう。