CDH3でHDFSを操作する


## はじめに

CDH3でHDFSを操作する方法を記述します。

## 環境

* CentOS 6.5
* CDH3
* jdk 1.6

## HDFSを操作する

hdfdユーザで操作します。

```shell
$ sudo su - hdfs
```

* ディレクトリを作成する

```shell
$ hadoop fs -mkdir test
```

* ディレクトリ/ファイル一覧を表示する

```shell
$ hadoop fs -ls
Found 1 items
drwxr-xr-x   - hdfs supergroup          0 2014-09-09 07:41 /user/hdfs/test
```

* ローカルファイルシステムからHDFSへファイルをコピーする

_/usr/lib/hadoop-0.20/README.txt_ をHDFSへコピーします。

```shell
$ pwd
/usr/lib/hadoop-0.20
$ hadoop fs -put README.txt test
$ hadoop fs ls test
Found 1 items
-rw-r--r--   1 hdfs supergroup       1366 2014-09-09 07:46 /user/hdfs/test/README.txt
```
* ローカルファイルシステムからHDFSへファイル名を指定してコピーします。

```shell
$ hadoop fs -put CHANGES.txt test/CHANGES.hdfs.txt
$ hadoop fs -ls test/
 Found 2 items
-rw-r--r--   1 hdfs supergroup     348776 2014-09-09 07:51 /user/hdfs/test/CHANGES.hdfs.txt
-rw-r--r--   1 hdfs supergroup       1366 2014-09-09 07:46 /user/hdfs/test/README.txt
```
* HDFSからローカルファイルシステムへファイルをコピーする

```shell
$ hadoop fs -get test/CHANGES.hdfs.txt /tmp
$ ls -l /tmp/CHANGES.hdfs.txt
-rw-rw-r--. 1 hdfs hdfs 348776 Sep  9 07:56 /tmp/CHANGES.hdfs.txt
```

* HDFSからローカルファイルシステムへファイル名を指定してコピーする

```shell
$ hadoop fs -get test/README.txt /tmp/README.local.txt
$ ls -l /tmp/README.txt
-rw-rw-r--. 1 hdfs hdfs 1366 Sep  9 07:58 /tmp/README.local.txt
```

* HDFS上でファイルをコピーする

```shell
$ hadoop fs -cp test test-backup
$ hadoop fs -ls
Found 2 items
drwxr-xr-x   - hdfs supergroup          0 2014-09-09 07:51 /user/hdfs/test
drwxr-xr-x   - hdfs supergroup          0 2014-09-09 10:18 /user/hdfs/test-backup
```
* HDFS上のファイルを参照する

```shell
$ hostname > /tmp/hostname.txt
$ cat /tmp/hostname.txt
hadoop-client
$ hadoop fs -put /tmp/hostname.txt test/
$ hadoop fs -cat test/hostname.txt
hadoop-client
```
* HDFS上の圧縮ファイルを参照する

```shell
$ hostname | gzip > /tmp/hostname.txt.gz
$ zcat /tmp/hostname.txt.gz
hadoop-client
$ hadoop fs -put /tmp/hostname.txt.gz test/
$ hadoop fs -text test/hostname.txt.gz
hadoop-client
```

* HDFS上でファイルを移動する

```shell
$ hadoop fs -mkdir test2
$ hadoop fs -mv test/CHANGES.hdfs.txt test2
$ hadoop fs -ls test2
Found 1 items
-rw-r--r--   1 hdfs supergroup     348776 2014-09-09 07:51 /user/hdfs/test2/CHANGES.hdfs.txt
```

* HDFS上のファイルを削除する

```shell
$ hadoop fs -ls test-backup
Found 2 items
-rw-r--r--   1 hdfs supergroup     348776 2014-09-09 10:18 /user/hdfs/test-backup/CHANGES.hdfs.txt
-rw-r--r--   1 hdfs supergroup       1366 2014-09-09 10:18 /user/hdfs/test-backup/README.txt
$ hadoop fs -rm test-backup/CHANGES.hdfs.txt
Deleted hdfs://hadoop-master:8020/user/hdfs/test-backup/CHANGES.hdfs.txt
$ hadoop fs -ls test-backup
Found 1 items
-rw-r--r--   1 hdfs supergroup       1366 2014-09-09 10:18 /user/hdfs/test-backup/README.txt
```

* HDFS上のディレクトリを削除する

```shell
$ hadoop fs -ls
Found 3 items
drwxr-xr-x   - hdfs supergroup          0 2014-09-09 10:30 /user/hdfs/test
drwxr-xr-x   - hdfs supergroup          0 2014-09-09 10:37 /user/hdfs/test-backup
drwxr-xr-x   - hdfs supergroup          0 2014-09-09 10:19 /user/hdfs/test2
$ hadoop fs -rmr test-backup
Deleted hdfs://hadoop-master:8020/user/hdfs/test-backup
$ hadoop fs -ls
Found 2 items
drwxr-xr-x   - hdfs supergroup          0 2014-09-09 10:30 /user/hdfs/test
drwxr-xr-x   - hdfs supergroup          0 2014-09-09 10:19 /user/hdfs/test2
```

## 参考

* [Hadoop FS Shell Guide](http://hadoop.apache.org/docs/r0.19.1/hdfs_shell.html)
__r0.19.1__のリンクとなっています
_CDH3_ にパッケージングされるhadoopのバージョンは __0.20.2__ です

* [CDH3 Update 6 Packaging & Tarball Downloads](http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH-Version-and-Packaging-Information/cdhvd_topic_7.html#topic_7_6_unique_1)