一、Hadoop Shell简介
改编自:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html
Hadoop Shell调用文件系统(FS)Shell命令应使用 bin/hadoop fs
二、Hadoop Shell命令列表
为方便文本复制,再来一遍文本版本得
cat chgrp chmod chown copyFromLocal
copyToLocal cp du dus expunge
get getmerge ls lsr mkdir
movefromLocal mv put rm rmr
setrep stat tail test ext
touchz
三、实验数据准备
为了对这些命令进行试验,先做一些准备工作,由于terminal对中文显示支持的不好,所以建议使用英文文本作为例子,可以到http://www.chinadaily.com.cn/摘取几段英文文本,做几个英文的文本文件。
目录创建
hadoop fs -mkdir -p /fs-test/news
hadoop fs -mkdir -p /fs-test/words
文件准备
news01.txt
news02.txt
news03.txt
words01.txt
words02.txt
words03.txt
将这几个文件放入到hdfs中
hadoop fs -put news*.txt /fs-test/news
hadoop fs -put news*.txt /fs-test/words
展示/fs-test及其子目录
hadoop fs -ls -R /fs-test
四、Hadoop FS Shell例子
1 cat
使用方法:hadoop fs -cat URI [URI …]
将路径指定文件的内容输出到stdout。
示例:
hadoop fs -cat hdfs://master:9000/fs-test/news/news01.txt hdfs://master:9000/fs-test/words/words01.txt
hadoop fs -cat /fs-test/news/news01.txt /fs-test/words/words01.txt
hadoop fs -cat file:///home/hadoop/share/news/news01.txt
2 chgrp
使用方法:hadoop fs -chgrp [-R] GROUP URI [URI …]
改变文件所属的组。使用-R将使改变在目录结构下递归进行。命令的使用者必须是文件的所有者或者超级用户。
3 chmod
使用方法:hadoop fs -chmod [-R]
改变文件的拥有者。使用-R将使改变在目录结构下递归进行。命令的使用者必须是超级用户。
示例:
hadoop fs -chmod -R 777 hdfs://master:9000/fs-test/news/news01.txt
4 chown
使用方法:hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
改变文件的拥有者。使用-R将使改变在目录结构下递归进行。命令的使用者必须是超级用户。
5 copyFromLocal
使用方法:hadoop fs -copyFromLocal
除了限定源路径是一个本地文件外,和put命令相似。
示例:
hadoop fs -ls /fs-test/news
hadoop fs -rm hdfs://master:9000/fs-test/news/news01.txt
hadoop fs -ls /fs-test/news
hadoop fs -copyFromLocal file:///home/hadoop/share/news/news01.txt hdfs://master:9000/fs-test/news
hadoop fs -ls /fs-test/news
6 cp
使用方法:hadoop fs -cp URI [URI …]
将文件从源路径复制到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。
示例:
hadoop fs -ls /fs-test/news
hadoop fs -rm hdfs://master:9000/fs-test/news/*
hadoop fs -ls /fs-test/news
hadoop fs -cp file:///home/hadoop/share/news/news01.txt hdfs://master:9000/fs-test/news
hadoop fs -cp file:///home/hadoop/share/news/news01.txt file:///home/hadoop/share/news/news02.txt file:///home/hadoop/share/news/news03.txt hdfs://master:9000/fs-test/news
hadoop fs -ls /fs-test/news
7 du
使用方法:hadoop fs -du URI [URI …]
显示目录中所有文件的大小,或者当只指定一个文件时,显示此文件的大小。
示例:
hadoop fs -du file:///home/hadoop/share hdfs://master:9000/fs-test
8 dus( 废弃,推荐使用-du -s )
使用方法:hadoop fs -dus
显示文件的大小。
示例:
hadoop fs -dus file:///home/hadoop/share hdfs://master:9000/fs-test
hadoop fs -du -s file:///home/hadoop/share hdfs://master:9000/fs-test
9 expunge
使用方法:hadoop fs -expunge
清空回收站。请参考HDFS设计文档以获取更多关于回收站特性的信息。
10 get
使用方法:hadoop fs -get [-ignorecrc] [-crc]
复制文件到本地文件系统。可用-ignorecrc选项复制CRC校验失败的文件。使用-crc选项复制文件以及CRC信息。
示例:
mkdir /home/hadoop/share/tmp
hadoop fs -get hdfs://master:9000/user/hadoop/fs-test/news/* /home/hadoop/share/tmp
ls /home/hadoop/share/tmp
11 getmerge
使用方法:hadoop fs -getmerge
接受一个源目录和一个目标文件作为输入,并且将源目录中所有的文件连接成本地目标文件。addnl是可选的,用于指定在每个文件结尾添加一个换行符。
示例:
12 ls
使用方法:hadoop fs -ls
如果是文件,则按照如下格式返回文件信息:
文件名 <副本数> 文件大小 修改日期 修改时间 权限 用户ID 组ID
如果是目录,则返回它直接子文件的一个列表,就像在Unix中一样。目录返回列表的信息如下:
目录名
示例:
hadoop fs -ls hdfs://master:9000/fs-test/news
hadoop fs -ls -R hdfs://master:9000/fs-test
13 lsr( 废弃,推荐使用ls -R)
使用方法:hadoop fs -lsr
ls命令的递归版本。类似于Unix中的ls -R。
示例:
hadoop fs -lsr hdfs://master:9000/fs-test
hadoop fs -ls -R hdfs://master:9000/fs-test
14 mkdir
使用方法:hadoop fs -mkdir
接受路径指定的uri作为参数,创建这些目录。其行为类似于Unix的mkdir -p,它会创建路径中的各级父目录。
示例:
hadoop fs -mkdir hdfs://master:9000/fs-test/t1 hdfs://master:9000/fs-test/t2
15 movefromLocal
使用方法:dfs -moveFromLocal
16 mv
使用方法:hadoop fs -mv URI [URI …]
将文件从源路径移动到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。不允许在不同的文件系统间移动文件。
示例:
hadoop fs -ls hdfs://master:9000/fs-test/t1
hadoop fs -mv hdfs://master:9000/fs-test/news/news01.txt hdfs://master:9000/fs-test/t1
hadoop fs -mv /fs-test/news/news02.txt /fs-test/news/news03.txt /fs-test/t1
hadoop fs -ls hdfs://master:9000/fs-test/t1
hadoop fs -ls hdfs://master:9000/fs-test/news
hadoop fs -mv /fs-test/t1/* /fs-test/news
hadoop fs -ls hdfs://master:9000/fs-test/t1
hadoop fs -ls hdfs://master:9000/fs-test/news
17 put
使用方法:hadoop fs -put
从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取输入写入目标文件系统。
示例:
hadoop fs -rm hdfs://master:9000/fs-test/t1/*
hadoop fs -put /home/hadoop/share/news/* hdfs://master:9000/fs-test/t1
hadoop fs -ls hdfs://master:9000/fs-test/t1
hadoop fs -put - hdfs://master:9000/fs-test/t1/stdio.txt
从标准输入中读取输入。CTRL+D结束输入
hadoop fs -ls hdfs://master:9000/fs-test/t1
hadoop fs -cat hdfs://master:9000/fs-test/t1/stdio.txt
18 rm
使用方法:hadoop fs -rm URI [URI …]
删除指定的文件。只删除非空目录和文件。请参考rmr命令了解递归删除。
示例:
hadoop fs -rm hdfs://master:9000/fs-test/t1/*
19 rmr(已废弃,推荐使用-rm -r)
使用方法:hadoop fs -rmr URI [URI …]
delete的递归版本。
示例:
hadoop fs -rm hdfs://master:9000/fs-test/t1
hadoop fs -rm -r hdfs://master:9000/fs-test/t1
20 setrep
使用方法:hadoop fs -setrep [-R]
改变一个文件的副本系数。-R选项用于递归改变目录下所有文件的副本系数。
示例:
hadoop fs -setrep -w 3 -R hdfs://master:9000/fs-test/news/news01.txt
21 stat
使用方法:hadoop fs -stat URI [URI …]
返回指定路径的统计信息。
示例:
hadoop fs -stat hdfs://master:9000/fs-test/news/news01.txt
22 tail
使用方法:hadoop fs -tail [-f] URI
将文件尾部1K字节的内容输出到stdout。支持-f选项,行为和Unix中一致。
示例:
hadoop fs -tail hdfs://master:9000/fs-test/news/news01.txt
23 test
使用方法:hadoop fs -test -[ezd] URI
选项:
-e 检查文件是否存在。如果存在则返回0。
-z 检查文件是否是0字节。如果是则返回0。
-d 如果路径是个目录,则返回1,否则返回0。
示例:
hadoop fs -test -e hdfs://master:9000/fs-test/news/news01.txt
24 text
使用方法:hadoop fs -text
将源文件输出为文本格式。允许的格式是zip和TextRecordInputStream。
25 touchz
使用方法:hadoop fs -touchz URI [URI …]
创建一个0字节的空文件。
hadoop fs -touchz hdfs://master:9000/fs-test/t2/zero.txt
hadoop fs -ls hdfs://master:9000/fs-test/t2/zero.txt