Apache HDFS/hadoopを、Single Node Clusterで動かしてみた

今回は、[Apache hadoopファミリーのHDFS](https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html)を試してみた
ちなみに、HDFSとは、"Hadoop Distributed File System"とのことだそうです。

#⬛︎ HDFS環境構築

- JDK環境をインストールし、JAVA_HOME環境変数にセットする

```
$ sudo apt-get install default-jdk
$ sudo update-alternatives --list java
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

$ cd $HOME
$ vi .profile
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=$HOME/hadoop-2.7.2/bin:$HOME/hadoop-2.7.2/sbin:$PATH
$ source .profile
```

- ssh環境をセットアップする

```
$ sudo apt-get install ssh
$ sudo apt-get install rsync
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
```
ssh localhostで、パスワード問い合わせが無いことを確認する

```
$ ssh localhost
$ exit
```

- Hadoopをダウンロードする

```
$ wget http://www.apache.org/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
$ tar xfz hadoop-2.7.2.tar.gz
$ cd hadoop-2.7.2/etc/hadoop/
```
- hadoop設定ファイルを修正する

まず、core-site.xmlを編集する

```
$ vi core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
```
つづいて、hdfs-site.xmlを編集する

```
$ vi hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
```
そして、hadoop-env.shも編集しておく

```
$ vi hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
```


- NameNodeを初期化する

```
$ hdfs namenode -format
16/03/04 03:55:40 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = HDFS/127.0.1.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.7.2

... (snip)

/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at HDFS/127.0.1.1
************************************************************/
```

- hadoopを起動する

```
$ start-dfs.sh 
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/tsubo/hadoop-2.7.2/logs/hadoop-tsubo-namenode-HDFS.out
localhost: starting datanode, logging to /home/tsubo/hadoop-2.7.2/logs/hadoop-tsubo-datanode-HDFS.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /home/tsubo/hadoop-2.7.2/logs/hadoop-tsubo-secondarynamenode-HDFS.out
```

- hadoopプロセス起動を確認する

```
$ jps
12767 Jps
12656 SecondaryNameNode
12462 DataNode
12302 NameNode
```
- hadoop動作状態を確認する

Webブラウザから、[http://localhost:50070/](http://localhost:50070/) にアクセスして、hadoop動作状態を確認する

![Overview.png](https://qiita-image-store.s3.amazonaws.com/0/103595/4b0061d3-ea75-5231-69f1-88fd1ef93263.png)


#⬛︎ HDFSを使ってみる

- fooディレクトリを作成してみる

```
$ hdfs dfs -ls /
$ hdfs dfs -mkdir /foo
$ hdfs dfs -ls /
Found 1 items
drwxr-xr-x   - tsubo supergroup          0 2016-03-04 04:11 /foo
```

- UNIXローカル上のテキストファイルを、HDFS上に保管してみる

```
$ cat /home/tsubo/test.txt
test data
$ hdfs dfs -put /home/tsubo/test.txt /foo
@HDFS:~$ hdfs dfs -ls /foo
Found 1 items
-rw-r--r--   1 tsubo supergroup         10 2016-03-04 04:14 /foo/test.txt
```
- HDFS上のtest.txtファイル内容を確認してみる

```
$ hdfs dfs -cat /foo/test.txt
test data
```

- Webブラウザの管理画面からも確認してみる

![Browse.png](https://qiita-image-store.s3.amazonaws.com/0/103595/7267afdd-6f75-7b0e-3dca-e83648d2dfc3.png)

- test.txtファイルを削除する

```
$ hdfs dfs -rm /foo/test.txt
16/03/04 04:20:54 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /foo/test.txt
```

- fooディレクトリを削除する

```
$ hdfs dfs -rmdir /foo
$ hdfs dfs -ls /
```

- 最後に、Hadoopを停止しておく

```
$ stop-dfs.sh
Stopping namenodes on [localhost]
localhost: stopping namenode
localhost: stopping datanode
Stopping secondary namenodes [0.0.0.0]
0.0.0.0: stopping secondarynamenode
```
以上