OSXで擬似分散モードのApacheHadoop2.7.0を動かす

遊んでたクラスタが諸事情により使えなくなったから自分のマシン上に擬似分散モードのを動かしたメモ
基本的には [HadoopAdventCalender2013 9日目 Hadoopのドキュメントを読む](http://qiita.com/ajis_ka/items/4d0373c68c2906c2bf3a) を参考

## ダウンロード
http://www.apache.org/dyn/closer.cgi/hadoop/common/ から、hadoop-2.7.0.tar.gzをダウンロードする


## 適当なところに展開する。(適当に/usr/local2/ってディレクトリ掘った)

```bash
$ tar zxvf ~/Download/hadoop-2.7.0.tar.gz -C /usr/local2/
```

## 設定ファイルバックアップ取って必要なやつコピーする

```bash
$ mv /usr/local2/hadoop-2.7.0/etc/hadoop /usr/local2/hadoop-2.7.0/etc/hadoop-backup
$ cp /usr/local2/hadoop-2.7.0/etc/hadoop-backup/core-site.xml /usr/local2/hadoop-2.7.0/etc/hadoop
$ cp /usr/local2/hadoop-2.7.0/etc/hadoop-backup/hdfs-site.xml /usr/local2/hadoop-2.7.0/etc/hadoop
$ cp /usr/local2/hadoop-2.7.0/etc/hadoop-backup/yarn-site.xml /usr/local2/hadoop-2.7.0/etc/hadoop
$ cp /usr/local2/hadoop-2.7.0/etc/hadoop-backup/capacity-scheduler.xml /usr/local2/hadoop-2.7.0/etc/hadoop
$ cp /usr/local2/hadoop-2.7.0/etc/hadoop-backup/hadoop-env.sh /usr/local2/hadoop-2.7.0/etc/hadoop
```

`/usr/local2/hadoop/etc` 以下にコピーした設定ファイルに必要な分追記

```/usr/local2/hadoop-2.7.0/etc/hadoop/core-site.xml
<property>
    <name>fs.defaultFS</name>
    <value>localhost:9000</value>
</property>
```

```/usr/local2/hadoop-2.7.0/etc/hadoop/hdfs-site.xml
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>
```

```/usr/local2/hadoop-2.7.0/etc/hadoop/yarn-site.xml
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
```

JAVA_HOMEは`/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home`の出力そのまま

```/usr/local2/hadoop-2.7.0/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
export HADOOP_CONF_DIR=/usr/local2/hadoop-2.7.0/etc/hadoop
```

## 初回起動前にnamenodeフォーマットする

```bash
$ /usr/local2/hadoop-2.7.0/bin/hdfs namenode -format
```

## 起動する

```bash
## DataNodeの起動
/usr/local2/hadoop-2.7.0/sbin/hadoop-daemon.sh --config /usr/local2/hadoop-2.7.0/etc/hadoop start datanode
## NameNodeの起動
/usr/local2/hadoop-2.7.0/sbin/hadoop-daemon.sh --config /usr/local2/hadoop-2.7.0/etc/hadoop start namenode
## ResourceManagerの起動
/usr/local2/hadoop-2.7.0/sbin/yarn-daemon.sh --config /usr/local2/hadoop-2.7.0/etc/hadoop start resourcemanager
## NodeManagerの起動
/usr/local2/hadoop-2.7.0/sbin/yarn-daemon.sh --config /usr/local2/hadoop-2.7.0/etc/hadoop start nodemanager
## JobHistoryServerの起動
/usr/local2/hadoop-2.7.0/sbin/mr-jobhistory-daemon.sh --config /usr/local2/hadoop-2.7.0/etc/hadoop start historyserver
```

## jpsで確認

```bash
$ jps
42608 ApplicationMaster
33139 NodeManager
46486 Jps
311 
33273 ResourceManager
33499 NameNode
33388 ApplicationHistoryServer
33613 DataNode
```

## Webインターフェース見る
* namenode http://localhost:50070
* YarnWebUI http://localhost:8088



## 動作確認
```bash
## 必要なディレクトリ作る
$ /usr/local2/hadoop-2.7.0/bin/hdfs dfs -mkdir /user
$ /usr/local2/hadoop-2.7.0/bin/hdfs dfs -mkdir /user/kodai_abe
$ /usr/local2/hadoop-2.7.0/bin/hdfs dfs -put /usr/local2/hadoop-2.7.0/etc/hadoop/hadoop-env.sh   

## wordcount走らせる
$ /usr/local2/hadoop-2.7.0/bin/yarn jar /usr/local2/hadoop-2.7.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar wordcount hadoop-env.sh wordcount_out  

## 出力結果を確認する
$ /usr/local2/hadoop-2.7.0/bin/hdfs dfs -ls wordcount_out 
2015-06-27 18:03:45,985 WARN  [main] util.NativeCodeLoader (NativeCodeLoader.java:<clinit>(62)) - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
-rw-r--r--   1 kodai_abe supergroup          0 2015-06-27 18:02 wordcount_out/_SUCCESS
-rw-r--r--   1 kodai_abe supergroup       3774 2015-06-27 18:02 wordcount_out/part-r-00000
```

## 追記
この環境でSpark動かした 

* [OSXでYARN上のSpark実行環境を構築する](http://qiita.com/frkout/items/77d3e37a247d7f4e3754)

この環境でFlink動かした

* [OSX上のHadoop環境でApacheFlink動かしてみる](http://qiita.com/frkout/items/76c85347830736b38168)