Mac に Ubuntu + CDH5 + Apache Spark 環境構築


(参考)
[VirtualBoxとCDH5でお手軽Apache Spark検証環境の構築](http://datasciesotist.hatenablog.jp/entry/2014/05/10/225809)
[Installing CDH 5 with YARN on a Single Linux Node in Pseudo-distributed mode](http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cdh_qs_yarn_pseudo.html)

## VirtualBox インストール

OS X 用のものをダウンロードしてインストール
https://www.virtualbox.org/wiki/Downloads


## Ubuntu 仮想環境作成

##### Vagrantfile 作成

```
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu"
  config.vm.box_url = "(VirtualBox の Ubuntu → http://www.vagrantbox.es/ 参照)"

  config.vm.provider "virtualbox" do |vbox|
    vbox.name = "cdh5"
    vbox.cpus = 4
    vbox.memory = 6144
  end
  
  config.vm.network :forwarded_port, guest: 50070, host: 50070
end
```
メモリは 6GB にしてます。4GB だと動きませんでした。

##### 仮想環境構築

```
$ vagrant up
```

```
$ vagrant ssh
```

##### サービス管理ツール入れとく
```
$ sudo apt-get install -y sysv-rc-conf
```

## CDH5 インストール

##### Oracle JDK7 インストール
```
$ sudo apt-get update
$ sudo apt-get install -y python-software-properties
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install -y oracle-java7-installer
```

##### CDH5 (擬似分散モード) インストール

```
$ cd ~
$ wget http://archive.cloudera.com/cdh5/one-click-install/trusty/amd64/cdh5-repository_1.0_all.deb
```

```
$ sudo dpkg -i cdh5-repository_1.0_all.deb
```

```
$ sudo apt-get update
$ sudo apt-get install hadoop-conf-pseudo
```

##### HDFS のフォーマット
```
$ sudo -u hdfs hdfs namenode -format
```

##### HDFS サービスの起動

```
# service hadoop-hdfs-datanode start
# service hadoop-hdfs-namenode start
# service hadoop-hdfs-secondarynamenode start

確認
# sysv-rc-conf --list | grep hadoop
# service hadoop-hdfs-datanode status
# service hadoop-hdfs-namenode status
# service hadoop-hdfs-secondarynamenode status
```

##### ブラウザから確認

###### 50070 ポート開ける

```
# ufw status
# ufw enable
# ufw status
# ufw allow 50070/tcp

ブラウザからアクセス
http://localhost:50070/
```

###### ssh (Port:22) 許可設定

```
# ufw allow 22/tcp
```

##### 必要な HDFS ディレクトリ作成

```
$ sudo /usr/lib/hadoop/libexec/init-hdfs.sh

確認
$ sudo -u hdfs hadoop fs -ls -R /
```

##### YARN サービスの起動

```
# service hadoop-yarn-resourcemanager start 
# service hadoop-yarn-nodemanager start 
# service hadoop-mapreduce-historyserver start

確認
# sysv-rc-conf --list | grep hadoop
# service hadoop-yarn-resourcemanager status
# service hadoop-yarn-nodemanager status
# service hadoop-mapreduce-historyserver status
```

##### ユーザーの作成
```
$ sudo adduser <username>
```

```
$ sudo -u hdfs hadoop fs -mkdir /user/<username>
$ sudo -u hdfs hadoop fs -chown <username> /user/<username>
```

##### サンプルアプリケーションの実行

```
# su - <username>
$ hadoop fs -mkdir input
$ hadoop fs -put /etc/hadoop/conf/*.xml input
$ hadoop fs -ls input
```

```
$ export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
```

```
ジョブ実行
$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar grep input output23 'dfs[a-z.]+'

確認
$ hadoop fs -ls
$ hadoop fs -ls output23
$ hadoop fs -cat output23/part-r-0000
```

## Apache Spark インストール

##### いろいろインストール

```
$ sudo apt-get install -y spark-core
$ sudo apt-get install -y spark-master
$ sudo apt-get install -y spark-worker
$ sudo apt-get install -y spark-history-server
$ sudo apt-get install -y spark-python
```

##### サービスの起動

```
$ sudo service spark-master start
$ sudo service spark-worker start 
```

さぁ、起動

```
$ spark-shell
/usr/lib/spark/bin/spark-shell: line 44: /usr/lib/spark/bin/utils.sh: No such file or directory
```

(´・ω・`)
Ubuntu + CDH 5.2.0 でのバグだそうです。	該当のファイルを GitHub から直接持ってきます。

```
# cd /usr/lib/spark/bin/
# wget https://raw.githubusercontent.com/apache/spark/branch-1.1/bin/utils.sh
# chmod +x utils.sh
```

今度こそ

```
$ spark-shell

Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.1.0
      /_/

Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_72)
Spark context available as sc.
```

おめでとうございます。