まとめ
- vagrant,virtualboxでお手軽Hadoop build 環境構築を目指した
- ダウンロードとかが遅いのでelapseタイムは絶対に10分に収まりません。
- この手順をやった人にvagrantのboxを分けてもらうのが一番早い。
- 驚愕のオチ
今回の方針
過去の失敗と目指すべき姿
- 色気を出して、公式が言っているのと違う環境をビルド環境にしようとしてど嵌る
- デスクトップ環境自体に色々と make install とかしちゃってカオス
という展開はもうおなかいっぱいである。
というわけで、極力公式ページにある情報にそった環境を仮想マシンとしてさくっと作って、綺麗さっぱりビルドできるようにするんだ..。
そして、この作業がおわったら俺コミッターを目指すんだ(志望フラグ)
前提条件
- VagrantとVirtualBoxがインストールされていること。
- ネットワーク通信が快適な環境であること。(大量の通信があるためテザリングとかでやると死にます。)
- この手順を真似して何が起きても動じない精神。
-
D:\>
は windowsの操作。$
はゲストOSのvagrantユーザの操作。
ゲストOSの用意
とりあえず会社で使い慣れてるCentOS6系で~、とか言わない。
HadoopのwikiのBuiliding.txtに従うとUbuntu14.04とのことなのでそのOSを準備しとく。
あと、環境のスクラップビルドに備えて box add しとく。1
D:\> mkdir vag_ubuntu1404
D:\> cd vag_ubuntu1404
D:\vag_ubuntu1404> vagrant box add Ubuntu1404 https://oss-binaries.phusionpassenger.com/vagrant/boxes/latest/ubuntu-14.04-amd64-vbox.box
ここの vagrant box add コマンドに渡すURLとしては色々なものが出回っているのだが、VirtualBox 向けの特殊なパッケージ(VirtualBox Guest Additions)が入っていないものを使うと問題が起きる。
具体的には、下記でVagrantfileに追記する apt-get スクリプトが vagrant によるVM生成時に動いてくれない。
VM構成情報を初期化する。
D:\vag_ubuntu1404> vagrant init Ubuntu1404
これで、 Vagrantfileというファイルができているはずなので、このファイルに以下のような変更を施す。
(略)
config.vm.network "private_network", ip: "192.168.33.10"
#この設定をしとくとホストOS側からこのアドレスにsshで入れるので便利。
(略)
config.vm.provider "virtualbox" do |vb|
# Display the VirtualBox GUI when booting the machine
#vb.gui = true
# Customize the amount of memory on the VM:
vb.memory = "1524"
end
#ちょっと多めのメモリをVMにつけないとbuildでOOMを出すことが。
(略)
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get -y update
sudo apt-get -y install git
sudo apt-get -y install software-properties-common
sudo apt-get -y purge openjdk*
sudo apt-get -y install software-properties-common
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get -y update
sudo apt-get -y install maven
sudo apt-get -y install build-essential autoconf automake libtool cmake zlib1g-dev pkg-config libssl-dev
sudo apt-get -y install protobuf-compiler
sudo apt-get -y install snappy libsnappy-dev
ease refer to https://01.org/intel%C2%AE-storage-acceleration-library-open-source-version
sudo apt-get -y install bzip2 libbz2-dev
sudo apt-get -y install libjansson-dev
sudo apt-get -y install fuse libfuse-dev
sudo apt-get -y install ansible
SHELL
# この設定でほぼ全て片付いたかもしれない。
ここまで終わったらゲストVMを生成する。小一時間かかるのでご飯でも食べに行くとよいです。
D:\vag_ubuntu1404> vagrant up
ログインして、oracle-java7-installerをインストールする。どうも、このパッケージは画面操作をしないと自動インストールできないようだ。調べると色々技があるようだが本筋じゃないので無視。
$ sudo apt-get -y install oracle-java7-installer
$ sudo apt-get -y install oracle-java7-set-default
Hadoopのコードの取得
さっそくHadoopをダウンロードして適当リリースのタグを取り出してビルドしてみよう。
$ git clone https://github.com/apache/hadoop.git ~/hadoop
$ cd ~/hadoop
$ git checkout -b rel-2.7.1 refs/tags/release-2.7.1
Hadoopのビルド
ビルドしてみる。最初にhadoop-maven-pluginsをインストールしないといけない模様。
$ cd ~/hadoop/hadoop-maven-plugins
$ mvn install
何となく成功したので本体を一揆にcompile。
$ cd ~/hadoop
$ mvn compile -Pnative
ビルドが通るはず。
(略)
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Apache Hadoop Main ................................ SUCCESS [0.745s]
[INFO] Apache Hadoop Project POM ......................... SUCCESS [1.274s]
[INFO] Apache Hadoop Annotations ......................... SUCCESS [1.227s]
[INFO] Apache Hadoop Project Dist POM .................... SUCCESS [0.379s]
[INFO] Apache Hadoop Assemblies .......................... SUCCESS [0.279s]
[INFO] Apache Hadoop Maven Plugins ....................... SUCCESS [0.469s]
[INFO] Apache Hadoop MiniKDC ............................. SUCCESS [1.211s]
[INFO] Apache Hadoop Auth ................................ SUCCESS [0.782s]
[INFO] Apache Hadoop Auth Examples ....................... SUCCESS [0.278s]
[INFO] Apache Hadoop Common .............................. SUCCESS [36.178s]
[INFO] Apache Hadoop NFS ................................. SUCCESS [0.471s]
[INFO] Apache Hadoop KMS ................................. SUCCESS [0.573s]
[INFO] Apache Hadoop Common Project ...................... SUCCESS [0.167s]
[INFO] Apache Hadoop HDFS ................................ SUCCESS [1:21.287s]
(略)
[INFO] Apache Hadoop Tools ............................... SUCCESS [0.292s]
[INFO] Apache Hadoop Distribution ........................ SUCCESS [0.341s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9:45.838s
[INFO] Finished at: Thu Dec 17 15:21:14 UTC 2015
[INFO] Final Memory: 106M/359M
[INFO] ------------------------------------------------------------------------
やったー。次回はwindows側のIntelliJと無理やり連携させて開発をする方法を書くかも。
ゲストOS改を保存
このVagrantfile からの vagrant up や各種資材のダウンロードはとてつもなく時間がかかるのでお好みのタイミングでゲストVMをvagrantのboxイメージとして登録して置くことをお勧めする。
詳しくはこのあたりを見ていただくとして、以下をしとけばまあ何となくうまくいく。
(vagrant package コマンドを打つとVMが勝手に停止するので注意。)
D:\vag_ubuntu1404> vagrant package
D:\vag_ubuntu1404> vagrant box add Ubuntu1404_ex package.box
これで、次にスクラップ&ビルドするときは、
D:\vag_dokoka> vagrant init Ubuntu1404_ex
D:\vag_dokoka> vagrant up
とやるだけでOK。あ、Vagrantfilesのvb.memoryや config.vm.network "private_network", ip: "192.168.33.10"
の設定は変わらず必要なので注意。(SHELLの設定は追加不要。)
なお、このpackage.boxは数GBになっていた。。。box add が終わったら消しましょう。
いつboxを作成するかはディスク容量とかにもよるが、一度ビルドが通ってからいいのではないだろうか。mvnによる依存のダウンロードとか時間かかるので...。
オチ
がんばって手塩にかけて作ったビルド環境。感動も一塩である。
しかし、よくよく最新の BUILDING.txt を見てみると...、
On Linux:
Install Docker and run this command:
$ ./start-build-env.sh
ファッ?要は上記コマンドを一発うつだけでビルド用環境が固められたDockerイメージでお手軽ビルドできちゃうそうです。まあ、tags 2.7.1 のBUILDING.txtには書いてありませんでしたが。
各ツールのバージョン
ホストOS: Windows 7 64bit
vagrant: 1.7.4 (最初昔インストールしていたvagrant1.4では起動することができず、1.7.4にアップデートを行った。)
VirtualBox: 5.0.10
ゲストOS: Ubuntu 14.04 x86_64
-
実の所、boxのイメージより最初のapt-get update とかの方がめちゃ重いことがすぐに判明する。
↩