WindowsでHadoopをビルドしてみる。

Windows の環境でHadoopがビルドする手順をメモします。
ビルドでUbuntu(WSL2)とDockerを利用します。

説明は以下のバージョンを対象にします。
・Windows10(Home) 21H1
・Docker 20.10.8
・Ubuntu 20.04
・Apache Maven 3.6.3
・JavaJDK 8u301
・Hadoop(Gitタグ：rel/release-3.3.1)

#Hadoopのビルド方法
Hadoopのビルドの仕方については、BUILDING.txtに記載があります。
https://github.com/apache/hadoop/blob/trunk/BUILDING.txt

要件に記載のある通り、Hadoopで使用する多くのライブラリを事前にインストールしておかなければなりません。

>要件：
>
>* Unixシステム
>* JDK 1.8
>* Maven3.3以降
>* Boost 1.72（ネイティブコードをコンパイルする場合）
>*プロトコルバッファ3.7.1（ネイティブコードをコンパイルする場合）
>* CMake 3.19以降（ネイティブコードをコンパイルする場合）
>* Zlib devel（ネイティブコードをコンパイルする場合）
>* Cyrus SASL開発（ネイティブコードをコンパイルする場合）
>* thread_localストレージをサポートするコンパイラの1つ：GCC 9.3.0以降、Visual Studio、
>  Clang（コミュニティバージョン）、Clang（iOS 9以降のバージョン）（ネイティブコードをコンパイルする場合）
>* openssl devel（ネイティブのhadoopパイプをコンパイルし、最高のHDFS暗号化パフォーマンスを取得する場合）
>* Linux FUSE（Filesystem in Userspace）バージョン2.6以降（fuse_dfsをコンパイルする場合）
>* Doxygen（libhdfsppをコンパイルしてドキュメントを生成する場合）
>*最初のビルドのインターネット接続（すべてのMavenおよびHadoop依存関係をフェッチするため）
>* python（releasedocs用）
>*コウモリ（シェルコードテスト用）
>* Node.js / bower / Ember-cli（YARN UI v2ビルド用）

ここで心折れます…
でも続く説明に簡単に環境を構築してくれる方法の記載があります！今回の説明ではこちらを利用したビルドなります。

>適切なツールをすべて備えた環境を取得する最も簡単な方法は、次の方法です。
>提供されたDocker構成の
>これには、最新バージョンのdockerが必要です（1.4.1以降が機能することがわかっています）。
>
>Linux / Macの場合：
>    Dockerをインストールして、次のコマンドを実行します。
>
>    $ ./start-build-env.sh

#Ubuntu(WSL2)のインストール
Ubuntu(WSL2)のインストールについて、既に多くの記事があります。
そのため詳しく説明はしないでおきます。
###コマンドプロンプト(管理者モード)を開く
1.Windowsキー + R
2.「ファイル名を指定して実行」に cmd と入力
3.Ctrl + Shift + Enter
###インストールコマンドを実行
```
wsl --install -d Ubuntu
ダウンロード中: Ubuntu
インストール中: Ubuntu
Ubuntu はインストールされました。
Ubuntu を起動しています...
```
初回はユーザーの作成を促されますので作成してください。
※testというユーザーを作成し説明しています。

#Dockerのインストール
Dockerのインストールに関しても既に多くの記事があります。
そのため詳しく説明はしないでおきます。
###Docker Desktop on Windowsのダウンロード
Installer をダウンロードします。
https://docs.docker.com/desktop/windows/install/
##

ダウンロードしたインストーラーを実行してください。 
Install 途中の Configuration で for WSL 2 のチェックを外さないようにしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438649/5dd99216-7a86-8b42-488e-4df4c1eabd38.png)
###インストール完了後にWSL2を認識しているか確認
Dockerを起動し「Use the WSL 2 based engine」 にチェックついていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438649/bed2ba2f-f976-54f4-af56-882984c920e2.png)
「Enable integration with my default WSL distro」 にチェックついていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438649/d58c32a9-1e6b-867c-197c-667c572580e2.png)

###Ubuntuを起動
Ubuntuを起動（開いている場合は一度閉じて再表示）します。
※スタートメニューにUbuntuがあるのでクリック。

###Mavenのインストール
```
sudo apt update
sudo apt install maven
mvn -version
```

###Dockerコマンドを実行してみる
```
#Dockerコマンドが実行できるか確認
docker run -dp 80:80 docker/getting-started

#Dockerのバージョンを確認
docker --version
```
###JavaJDKをインストール
openJDKではなくjavaJDKを使用します。（mavenコマンド実行時にtools.jarを求められるため）
以下のサイトからJDK1.8をダウンロードしてください。Ubuntuからもwgetコマンドで取得は可能です。
https://www.java.com/ja/download/ie_manual.jsp

取得したファイルをWindowsのエクスプローラで以下のパスに配置してください。

``` 
\\wsl$\Ubuntu\opt\java
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438649/d07984ff-8394-360f-24fa-1d2f9a6b1791.png)

配置後にUbuntuにてJDKのインストールを行います。

```
#ファイルの解凍
cd /opt/java/
sudo tar -zxf jdk-8u301-linux-x64.tar.gz

#解凍後にJavaをインストール
sudo update-alternatives --install /usr/bin/java java /opt/java/jdk1.8.0_301/bin/java 2000

#他のJavaが存在しないか確認(mavenインストール時にopenJDKが入っている)
sudo update-alternatives --config java

#1.8.0_301となっているか確認
java -version
 java version "1.8.0_301"
 Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
 Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
```
#Hadoopのビルド
ここから本題に入ります。
###Hadoopプロジェクトを取得する
```
#githubよりHadoopをクローン
sudo mkdir /hdp
cd /hdp/
sudo git clone https://github.com/apache/hadoop.git && cd hadoop

#rel/release-3.3.1をチェックアウト
sudo git checkout rel/release-3.3.1
```

###ビルド環境を構築
```
#Dockerにビルド環境を構築してもらう
./start-build-env.sh

#実行後、以下のメッセージが出たら完了
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

 _   _           _                    ______
| | | |         | |                   |  _  \
| |_| | __ _  __| | ___   ___  _ __   | | | |_____   __
|  _  |/ _` |/ _` |/ _ \ / _ \| '_ \  | | | / _ \ \ / /
| | | | (_| | (_| | (_) | (_) | |_) | | |/ /  __/\ V /
\_| |_/\__,_|\__,_|\___/ \___/| .__/  |___/ \___| \_(_)
                              | |
                              |_|

This is the standard Hadoop Developer build environment.
This has all the right tools installed required to build
Hadoop from source.
```

###mavenコマンドでビルドを実施
```
cd /hdp/hadoop/
sudo mvn package -Pdist -DskipTests -Dtar -Dmaven.javadoc.skip=true
```

###ビルド成功後、以下のディレクトリにHadoopモジュール(zipファイル)ができあがってる
```
ll hadoop-dist/target/
 -rw-r--r-- 1 root root 520637149 Sep 19 09:05 hadoop-3.3.1.tar.gz
```

#参考にさせていただいた記事
https://qiita.com/KoKeCross/items/a6365af2594a102a817b