LoginSignup
4
6

More than 5 years have passed since last update.

Windows 8.1で Hadoop 2.6.0 をビルドする

Last updated at Posted at 2014-12-19

Linux で動かせばいいようなものだが、なかには、会社の制約で Windows しか利用できない人が、Hadoop や関連技術を勉強したいこともあるだろうということで。Windows 8.1 でビルドしているが、Windows 7 でも同様にビルドできる。ただし、x64版のみ。少し調整すれば x86 でもビルドできるはずだが、Hadoop はメモリ食いなので、どのみち x86 では使い物にならないので。
ちなみに、Hadoop 2.6.0 は、2.4.1の頃には、パッチが必要だった OSXでもすんなりビルドできる。

ビルドするより、すぐに動かしたい場合、以下から、Hadoop 2.6.0やそれに対応したHive、Sparkなども含め、ビルド済みバイナリを入手できる。
(http://sourceforge.jp/projects/win-hadoop/releases/62852)

必要なもの

  • Windows 8.1 for x64
  • Visual Studio 2010 Express (C++のみ)
  • Visual Studio 2010 SP1
  • Windows SDK for Windows 7 (7.1)
  • JDK7 (x64)
  • Maven 3.2.3
  • Ant 1.9.3
  • Protocol Buffer Compiler 2.5.0
  • CMake 3.0.2
  • MinGW32
  • Zlib 1.2.8
  • Hadoop 2.6.0 ソース

注意として、Windows SDK のインストールが失敗することがある。その場合は、VC++2010再配布パッケージ x86 と x64 の両方をアンインストールしてから、セットアップを開始し、コンポネントの選択で Visual C++ Compiler のチェックをはずしてインストールする。インストールがうまくいったら、別途ダウンロードした、VC++2010再配布パッケージとWindows SDK7.1用VC++更新(KB2519277)をインストールする。
Visual Studio 2010 Express は、SP1 をインストールしていないと、ビルド途中で、ヘッダが見つからないようなエラーがでる。

JDK7 はセットアップでインストール。javac にPATHを通す。ビルド時には気にしなくていいが、ビルドした Hadoop を動かすときに JAVA_HOMEに、空白(0x20)を含むパスを設定できないので、JAVA_HOME=C:\Progra~1\Java\jdk1.7.0_71 などのようにするほうがよい。

Maven, Ant は、適当に展開して、PATHを通す。lib をCLASSPATHに追加する。

Protocol Buffer コンパイラは、https://code.google.com/p/protobuf/downloads/detail?name=protoc-2.5.0-win32.zip からビルド済みのものをダウンロードすると、protoc.exe だけがあるので、PATHを通すのが面倒なので C:\Windows にコピーする。

CMake も http://www.cmake.org/files/v3.0/cmake-3.0.2-win32-x86.zip からビルド済み(x86でよい)のものをダウンロードし、適当に展開して、binにPATHを通す。

MinGW32 は、msys の sh.exe や tar.exe だけを使いたいだけなので、msys-git や cygwin などでもよいはずだが、ビルドは、cmd.exe 上で行うので、そこから利用できる必要がある。一時的に使いたいだけなので、今回は、ビルド前に手作業で、msys のパス (C:\MinGW\msys\1.0\bin)をPATHに追加する(PATHの先頭に追加するほうが問題が出にくいと思う)。

このほか、本当は Zlib も必要だが、少し動かすぐらいならば、なくても動作確認までできる。Zlib は、ビルド済みバイナリーが x86 のみしかダウンロードできないので、別途、x64 用を自分でビルドする。

Zlibを使うには、
www.zlib.netよりzlib128.zipをダウンロードし、展開したら、Windows SDKのコマンドプロンプトでzlibのフォルダにいき、以下を実行する。

nmake -f win32\Makefile.msc

zlib1.dllができているはずなので、C:\Windows\System32 にコピーして、環境変数 ZLIB_HOMEに展開したフォルダを指定しておく。
(必要な includeファイル、libファイルは zconf.h、zlib.h、zdll.lib、zlib.lib なので、適当なフォルダにコピーしておくとよい)

ビルド

Hadoop はパス名が長いものがあるので、%USERHOME% 以下のディレクトリに展開すると失敗するので、C:\WORK などの C:\ 直下か1つ下にソースを展開する。

Windows SDK のコマンドプロンプトから、ビルド開始するのだが、Windows 8.1 で、Windows7 以前のスタートメニューは、C:\ProgramData\Microsoft\Windows\スタートメニュー\プログラム にあるので、そこから、Microsoft Windows SDK v7.1 の Command Prompt を起動する。
デフォルトで、x64 Debug ターゲットで起動するので、setenv.cmd /x64 /Release として、Release ターゲットに変更する。
テキストの色が気になる場合は、color 7 として、元の色に戻す。

この時点で、javac, mvn, ant, protoc, cmake, sh, tar にPATHが通っていないなら、追加する。
利用しているネットワークが、PROXY環境のときには、MAVEN_OPTSANT_OPTS に適宜PROXYを設定する(set ANT_OPTS=-Dhttp.proxyHost=proxy.yourdomain -Dhttp.proxyPort=8080)。

Hadoop のビルドに必要な環境変数を設定する。

set Platform=x64
set TARGET_CPU=amd64

Hadoop 2.6.0 のソースフォルダに移動し、以下を実行。

cd c:\work\hadoop-2.6.0-src
mvn clean
cd hadoop-maven-plugins
mvn install
cd ..

あとは、以下のコマンドで、パッケージのビルドを一気に行う。

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

途中で、エラーがでて、詳しく出力を確認したいときは、mvn -e -X … とする。エラーがでるのは、ほぼ、native ビルドの箇所だと思うが、上記の環境構築ができていれば、エラーは起きないはず。
コマンドプロンプトをスタートメニュー内の Windows SDK コマンドプロンプトを使っていないと、後から setenv.cmd で Windows SDKビルド環境を設定したコマンドプロンプトではエラーが起きる事がある。おかしいときは、Windows SDK のコマンドプロンプトを開き直して、パス設定の順序、環境変数などを確認し、mvn cleanできれいにしてからやり直す。
モバイルPCでのビルドには、20-30分ぐらいかかる。

ビルドが成功すると hadoop-dist\target\hadoop-2.6.0 に hadoop 一式ができあがっているので、C:\Hadoop などとしてコピーする。再配布には、hadoop-dist\target に hadoop-2.6.0.tar.gz があるので、それを使う。

動作確認

まずは、ローカルモードで動作確認する。

C:\Hadoop\etc\hadoop\hadoop-env.cmd を編集し、以下の環境変数を設定する。場所は、JAVA_HOME の設定ある行あたりに続けて書いてよい。

hadoop-env.cmd
set JAVA_HOME=C:\Progra~1\Java\jdk1.7.0_71
set HADOOP_PREFIX=C:\Hadoop
set HADOOP_HOME=%HADOOP_PREFIX%
set HADOOP_CONF_DIR=%HADOOP_HOME%\etc\hadoop

以下の動作確認には、必要ないが、いつも使う場合には、PATH に C:\Hadoop\bin を追加しておく。これをしていないと、いきなり、疑似分散モードで使いたいときに、事前に bin\hadoop コマンドを実行しないといけなくなる。
また、本当は管理者権限で動作させないとエラーになる箇所(リソースマネージャがシンボリックリンクを作るときなど)があるが、以下の動作確認では、通常ユーザーでも動作する。YARNを動作させるときは、HDFSとともに管理者権限のコマンドプロンプトから起動すること。

通常のコマンドプロンプトを開き、以下を実行する。

cd C:\Hadoop
bin\hadoop jar share\hadoop\mapreduce\hadoop-mapreduce-examples-2.6.0.jar pi 5 100

最後に Estimated value of Pi is 3.1… のようなものがでてくれば成功。

次に疑似分散モードで動作確認する。

これが動作すれば、とりあえずの Hadoopのアプリ開発や、(クラスター構築や分散に関すること以外の)勉強が十分できる。

etc\hadoop\core-site.xml に以下を追加する。

core-site.xml
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://127.0.0.1:9000</value>
</property>

hadoop.tmp.dir を変更したいときは、少し変わったパス記述が必要になる。例えば、C:\Hadoop\data にする場合は以下のようにする。

core-site.xml
<property>
  <name>hadoop.tmp.dir</name>
  <value>/c:/hadoop/data</value>
</property>

etc\hadoop\hdfs-site.xml に以下を追加する。

hdfs-site.xml
<property>
  <name>dfs.replication</name>
  <value>1</value>
</property>

以下をコマンドプロンプトから実行する。

bin\hdfs namespace -format

デフォルトでは、C:\tmp\hadoop-%USERNAME% にHadoopのデータディレクトリが作られる。
以下のコマンドで HDFS を起動する。

sbin\start-dfs.cmd

コマンドプロンプトが2つ開いて、Namenode と Datanode が起動する。エラーがでなければ、邪魔なので最小化する。
HDFS にデフォルトのユーザーディレクトリを作成する。

bin\hdfs dfs -mkdir -p /user/%USERNAME%

これで、HDFSの準備が完了したので、grep のサンプルを使って、動作確認する。

bin\hdfs dfs -put C:\Hadoop\etc\hadoop input-test
bin\hdfs dfs -ls

bin\hadoop jar share\hadoop\mapreduce\hadoop-mapreduce-examples-2.6.0.jar grep input-test output-test "dfs[a-z.]+"

bin\hdfs dfs -cat output-test\part-r-*

うまくいけば、最後に、10行そこそこの dfsが含まれる行が表示されているはず。
なお、http://localhost:50070/ にアクセスすれば、簡単な hadoop の状況を確認できる。

Windows の場合、hdfs dfs -put のとき、ソースディレクトリは、フルパスで指定しないと失敗する。また、Linux のときは、grep のパラメータをシングルクォートしていたが、Windows ではシングルクォートがそのまま文字として渡されてしまうのでダブルクォートを使う。

HDFSを停止するには、以下のコマンドを使う。

sbin\stop-dfs.cmd

yarn の動作を確認するには、etc\hadoop\mapred-site.xml や etc\hadoop\yarn-site.xml も編集する必要がある。

mapred-site.xml
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
yarn-site.xml
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

YARNを起動するには、

sbin/start-yarn.cmd

動作確認は、上記の grep の例を使ってもよいし、WindowsでHiveとSparkを動かす で示しているように、HiveやSparkで動作を確認することもできる。HiveやSparkまで利用すれば、実用的な運用も視野に入るだろう。

以上、お疲れさまでした。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6