码迷,mamicode.com
首页 > 系统相关 > 详细

Hadoop之文件系统Shell

时间:2015-08-08 15:01:09      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:

概述: 

文件系统(FS)Shell包含各种类-Shell的命令,直接和Hadoop分布式文件系统(HDFS)交互,也支持对其他文件系统的支持,例如:本地文件系统FS,HFTP FS,S3 FS,和其他。FS Shell的调用:

bin/hadoop fs <args>

所有的FS shell命令都要带URI路径作为参数,URI的格式是:scheme://authority/path。如果是HDFS,则scheme是hdfs,如果是本地文件系统,则scheme是file。

scheme和authorty是可选的,如果没有指定,默认的scheme是在配置文件中指定的。一个HDFS文件或目录如:/parent/child用HDFS表示,则是:hdfs://parent/child或者简单的写成/parent/child(但是前提条件是你配置文件指向的是hdfs://namenodehost)。

大多数的FS shell命令,其实和linux是对应的。不同之处每个命令都有具体的描述,错误信息会通过错误输出stderr,其他信息通过stdout输出。

如果使用hdfs,那么hdfs dfs和hadoop fs是类似的。

appendToFile

使用: hadoop fs -appendToFile <localsrc> ... <dst>

将一个本地文件系统的源文件或多个源文件追加到目标文件系统,也可以读取标准输入的数据,追加到目标文件系统。

    hadoop fs -appendToFile localfile /user/hadoop/hadoopfile 将本地文件localfile追加到目标文件系统/user/hadoop/hadoopfile
    hadoop fs -appendToFile localfile1 localfile2 /user/hadoop/hadoopfile  将本地文件localfile1和2追加到目标文件系统/user/hadoop/hadoopfile
    hadoop fs -appendToFile localfile hdfs://nn.example.com/hadoop/hadoopfile  将本地文件localfile追加到指定目标文件系统的/user/hadoop/hadoopfile
    hadoop fs -appendToFile - hdfs://nn.example.com/hadoop/hadoopfile   从标准输入读取数据

返回值:

返回0则成功,1则失败。

cat

使用: hadoop fs -cat URI [URI ...]

将指定URI的内容用标准输出stdout输出。

例子:

hadoop fs -cat hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hadoop fs -cat file:///file3 /user/hadoop/file4

返回值:

返回0则成功,1则失败。

checksum

使用: hadoop fs -checksum URI [URI ...]

返回文件的校验和信息。

例子:

[root@nn1 bin]# hadoop fs -checksum file:///usr/apache/hadoop-2.4.1/bin/1.txt file:///usr/apache/hadoop-2.4.1/bin/2.txt 
file:///usr/apache/hadoop-2.4.1/bin/1.txt	NONE	
file:///usr/apache/hadoop-2.4.1/bin/2.txt	NONE	

[root@nn1 bin]# hadoop fs -checksum hdfs://10.0.1.78:8020/test1 /apps/hive/install/hive-exec-0.13.1.jar
hdfs://10.0.1.78:8020/test1	MD5-of-0MD5-of-512CRC32C	0000020000000000000000008f708c9e4a4ec19d554a96c72b655932
/apps/hive/install/hive-exec-0.13.1.jar	MD5-of-0MD5-of-512CRC32C	00000200000000000000000060814965c82060d526756df03bf81383

chgrp

使用: hadoop fs -chgrp [-R] GROUP URI [URI ...]

改变文件组,这个用户必须是文件的拥有者,或者是超级管理员。

参数

  • -R 如果文件是目录的话,命令将会递归生效。跟很多Linux的命令类似。

chmod

使用: hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]

改变文件的的权限,这个用户必须是文件的拥有者,或者是超级管理员。

参数

  • -R 如果文件是目录的话,命令将会递归生效。跟很多Linux的命令类似。

chown

使用: hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]

改变文件的拥有者. 这个游湖

Options

  • -R 如果文件是目录的话,命令将会递归生效。跟很多Linux的命令类似。

copyFromLocal

使用: hadoop fs -copyFromLocal <localsrc> URI

从本地文件系统考本到集群上,出了资源文件必须是本地文件之外,和put命令类似

参数:

  • -f    如果文件存在,则覆盖。
例子:

[root@nn1 bin]# cat 1.txt 
1111
[root@nn1 bin]# cat 2.txt 
22222222
[root@nn1 bin]# hadoop fs -copyFromLocal 1.txt /fish/1.txt   //将本地文件拷贝到HDFS的文件/fish/1.txt
[root@nn1 bin]# hadoop fs -cat /fish/1.txt  //查看
1111
[root@nn1 bin]# hadoop fs -copyFromLocal -f 2.txt /fish/1.txt  //加-f参数覆盖HDFS的文件/fish/1.txt
[root@nn1 bin]# hadoop fs -cat /fish/1.txt //查看,是文件2.txt的内容
22222222

copyToLocal

使用: hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>

将集群文件拷贝到本地文件系统。除了目标路径仅限于本地文件,和get命令类似。 -ignorecrc 选项复制CRC校验失败的文 件。使用-crc 选项复制文件以及CRC信息。


count

使用: hadoop fs -count [-q] [-h] [-v] <paths>

计算目录下文件和目录的数量,大小情况,使用-count的输出项有:DIR_COUNT, FILE_COUNT, CONTENT_SIZE, PATHNAME

使用-count -q的输出项有: QUOTA, REMAINING_QUATA, SPACE_QUOTA, REMAINING_SPACE_QUOTA, DIR_COUNT, FILE_COUNT, CONTENT_SIZE, PATHNAME

-h option shows sizes in human readable format.

-v 多显示一个标题行(hadoop-2.4.1没有参数

[root@nn1 bin]# hadoop fs -count -h
-count: Illegal option -h
Usage: hadoop fs [generic options] -count [-q] <path> ...
例子:

  • hadoop fs -count hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
  • hadoop fs -count -q hdfs://nn1.example.com/file1
  • hadoop fs -count -q -h hdfs://nn1.example.com/file1
  • hdfs dfs -count -q -h -v hdfs://nn1.example.com/file1

返回值:

返回0则成功,-1则失败。


cp

使用: hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>

从源文件拷贝到目标文件,这个命令允许多个源,目标路径必须是一个目录。


参数:

  • -f   如果目标路径已经存在,则覆盖。
  • -p   该选择会保留文件的属性[topx] (timestamps(时间戳), ownership(所有权), permission(权限), ACL, XAttr)。 如果-p没有指定参数,那么就保存timestamps(时间戳), ownership(所有权), permission(权限)。如果指定了-pa,那么同时保留权限信息。因为ACL的等级要比permission(权限)更高级。-p选项决定了是否保留原始的namespace信息。

例子:

//HDFS文件拷贝到本地文件系统
[root@nn1 bin]# hadoop fs -cp /apps/tez-0.4.1/tez-api-0.4.1-incubating.jar file:///home
[root@nn1 bin]# ll /home/
total 748
drwx------   2 azkaban hadoop   4096 Aug 21  2014 azkaban
drwx------. 11 hadoop  hadoop   4096 Jul 30 09:48 hadoop
drwxr-xr-x   4 root    root     4096 Jul 22 12:40 root
-rw-r--r--   1 root    root   752262 Aug  7 14:59 tez-api-0.4.1-incubating.jar
//HDFS文件拷贝到HDFS
[root@nn1 bin]# hadoop fs -cp /apps/tez-0.4.1/tez-api-0.4.1-incubating.jar /fish/
[root@nn1 bin]# hadoop fs -ls /fish/
Found 4 items
-rw-r--r--   3 root   supergroup        894 2015-08-07 12:31 /fish/3.txt
-rw-r--r--   3 fish   supergroup        193 2015-04-27 20:35 /fish/multi.txt
drwxr-xr-x   - hadoop supergroup          0 2015-04-28 10:32 /fish/out
-rw-r--r--   3 root   supergroup     752262 2015-08-07 15:00 /fish/tez-api-0.4.1-incubating.jar
//本地文件拷贝到本地文件系统
[root@nn1 bin]# hadoop fs -cp file:///home/tez-api-0.4.1-incubating.jar file:///usr/
返回值:

返回0则成功,-1则失败。


df

使用: hadoop fs -df [-h] URI [URI ...]

显示空闲空间

参数:

  • -h 用更人性化的方式展示文件的大小(例如,用67108864代替64M)

例子:

[root@nn1 bin]# hadoop fs -df -h /fish
Filesystem   Size     Used  Available  Use%
hdfs://nns  1.3 T  360.5 G    848.8 G   26%
//hdfs://nns文件系统,集群中总共有1.3T的空间,使用了360G,可以的还有848.8G,使用了百分之26%

du

使用: hadoop fs -du [-s] [-h] URI [URI ...]

显示文件和目录的大小,如果是目录则是该目录中所有文件的大小,如果是单个文件,则显示该文件的小大

参数:
  • -s 显示指定目录下所有文件整体的大小,而非逐个显示文件或目录的大小
  • -h 用更人性化的方式展示文件的大小(例如,用67108864代替64M)

例子:

  • hadoop fs -du /user/hadoop/dir1 /user/hadoop/file1 hdfs://nn.example.com/user/hadoop/dir1

返回值:返回0则成功,-1则失败。

dus

使用: hadoop fs -dus <args>

显示一个文件长度的摘要.

Note: 该命令已经过期,使用hadoop fs -du -s替代。

expunge

使用: hadoop fs -expunge

清空垃圾箱.

find

(官方文档有,Hadoop2.4.1不存在这个命令)

使用: hadoop fs -find <path> ... <expression> ...

查找所有匹配指定表达式的文件,并且将选定的操作应用于它们。如果没有路径被指定,那么默认查找当前工作目录,如果没有指定表达式, 默认是: -print

例子:

hadoop fs -find / -name test -print

返回值:返回0则成功,-1则失败。

get

使用: hadoop fs -get [-ignorecrc] [-crc] <src> <localdst>

拷贝文件到本地系统,使用通过“-ignorecrc”选项校验失败的文件,使用“-crc”选项,则可以拷贝文件和CRC信息。

例子:

  • hadoop fs -get /user/hadoop/file localfile
  • hadoop fs -get hdfs://nn.example.com/user/hadoop/file localfile

返回0的成功和非零则错误。

getfacl

使用: hadoop fs -getfacl [-R] <path>

展示文件或目录的ACL(访问控制列表)信息。如果目录有默认的ACL,那么也会展示默认的ACL。

参数:

  • -R: 递归的获取所有文件和目录的ACL
  • path: 文件或目录列表

例子:

  • hadoop fs -getfacl /file
  • hadoop fs -getfacl -R /dir

返回0的成功和非零则错误。

setfacl

使用: hadoop fs -setfacl [-R] [-b |-k -m |-x <acl_spec> <path>] |[--set <acl_spec> <path>]

设置文件和目录的控制列表(ACLs)。

参数:

  • -b: 删除所有扩展的acl信息,除了基本的acl信息(所有者,群组,其他)将被保留,以保证权限的兼容性;
  • -k: 删除默认的ACL
  • -R: 对所有文件或目录递归的应用这些操作。
  • -m: 修改ACL,新的条目加入到ACL,旧的规则会被保留;
  • -x: 删除指定的ACL条目。其他ACL条目保留。
  • --set: 完全取代现在的ACL规则,替换成新的ACL规则。新的ACL规则中必须包含用户、分组以及其他保证兼容性的权限信息;
  • acl_spec: 逗号分隔的ACL列表
  • path: 需要修改的文件或目录路径。
例子:
  • hadoop fs -setfacl -m user:hadoop:rw- /file
  • hadoop fs -setfacl -x user:hadoop /file
  • hadoop fs -setfacl -b /file
  • hadoop fs -setfacl -k /dir
  • hadoop fs -setfacl --set user::rw-,user:hadoop:rw-,group::r--,other::r-- /file
  • hadoop fs -setfacl -R -m user:hadoop:r-x /dir
  • hadoop fs -setfacl -m default:user:hadoop:r-x /dir
返回值: 返回0为成功,-1则失败。

getfattr

(官方文档有,Hadoop2.4.1不存在这个命令)

使用: hadoop fs -getfattr [-R] -n name | -d [-e en] <path>

显示文件或目录的扩展属性的name和value(如果存在的话)。

参数:

  • -R: 递归列出目录中所有文件和目录的属性。
  • -n name: 转储指定名称的扩展属性。
  • -d: 转储关联路径的所有扩展属性
  • -e encoding: 对检索出来的值进行编码。可用的编码方式(encoding)包括text、hex和base64。使用text的话,检索出的值已双引号括起来的字符串形式展现;使用hex或者base64的话,检索出的值分别以0x或者0s打头的编码形式展现。
  • path: 文件和目录。

例子:

  • hadoop fs -getfattr -d /file
  • hadoop fs -getfattr -R -n user.myAttr /dir

返回0的成功和非零则错误。

setfattr

(官方文档有,Hadoop2.4.1不存在这个命令)

使用: hadoop fs -setfattr -n name [-v value] | -x name <path>

为文件或者目录设置一个扩展属性:name和value。

参数:

  • -b: 删除所有扩展的acl信息,基本的acl信息(所有者,群组,其他)将被保留,以保证权限的兼容性;
  • -n name: 扩展的属性名称
  • -v value: 扩展的属性值. 对于值有三种不同的编码方式。如果参数是以双引号括起来的,那么这个值是字符串。如果参数是以0x或0X打头的,那么它是16进制的数字。如果参数是以0s或0S打头的,那么它的编码方式是base64。
  • -x name: 删除扩展的属性
  • path: 文件或者目录

例子:

  • hadoop fs -setfattr -n user.myAttr -v myValue /file
  • hadoop fs -setfattr -n user.noValue /file
  • hadoop fs -setfattr -x user.myAttr /file
返回值: 返回0为成功,-1则失败

getmerge

使用: hadoop fs -getmerge <src> <localdst> [addnl]

以一个源目录和一个本地目标文件作为输入,并且将源目录中所有的文件连接成本地目标文件。addnl是可选的,用于在每个文件结尾添加一个换行符。

//将HDFS的/fish文件夹的文件,合并到本地/home/4.txt文件。
hadoop fs -getmerge /fish fish:///home/4.txt

help

使用: hadoop fs -help

返回使用说明

ls

使用: hadoop fs -ls [-d] [-h] [-R] [-t] [-S] [-r] [-u] <args>

参数:

  • -d: 像普通文件一样列出来。
  • -h: 用更直观的方式显示文件大小 (例如 64.0m 替代 67108864).
  • -R: 递归子目录列表。
  • -t: 按修改时间排序(最近一次排第一)
  • -S: 按输出的文件大小排序
  • -r: 反向排序
  • -u: 使用访问时间而不是显示和排序的时间。

ls命令会返回一下文件的状态:

permissions(权限) number_of_replicas(副本数量) userid(用户ID) groupid(分组ID) filesize(文件大小) modification_date(修改日期) modification_time(修改时间) filename(文件名)

对于目录,ls会返回目录中的第一级内容,显示格式如下

permissions(权限) userid(用户ID) groupid(分组ID) modification_date(修改日期) modification_time(修改时间) dirname(目录名称)

目录中的文件默认以文件名称排序

例子:

  • hadoop fs -ls /user/hadoop/file1

返回值: 返回0为成功,-1则失败

lsr

使用: hadoop fs -lsr <args>

ls命令的递归版本

注意: 这个耳鸣了是过期的,可以用hadoop fs -ls -R

mkdir

使用: hadoop fs -mkdir [-p] <paths>

以URI作为路径,创建目录。

参数:

  • -p 和Linux的mkdir -p类似,如果父路径不存在,会创建父路径。

例子:

[root@nn1 bin]# hadoop fs -mkdir file:///home/a1 file:///home/a2
[root@nn1 bin]# ll /home/
total 20
drwxr-xr-x   2 root    root   4096 Aug  8 09:45 a1
drwxr-xr-x   2 root    root   4096 Aug  8 09:45 a2

[root@nn1 bin]# hadoop fs -mkdir /home/a1 /home/a2
[root@nn1 bin]# hadoop fs -ls /home/
Found 2 items
drwxr-xr-x   - root          supergroup          0 2015-08-08 09:47 /home/a1
drwxr-xr-x   - root          supergroup          0 2015-08-08 09:47 /home/a2

返回值: 返回0为成功,-1则失败

moveFromLocal

使用: hadoop fs -moveFromLocal <localsrc> <dst>

 除了本地路径在被拷贝后会被删除。其他类似于put命令

moveToLocal

使用: hadoop fs -moveToLocal [-crc] <src> <dst>

目前为止还未实现。

mv

使用: hadoop fs -mv URI [URI ...] <dest>

将文件从源路径移动到目标路径(文件和目录都可以移动),这个命令允许多个源,但是目标路径必须是一个目录,跨文件系统的移动文件是不允许的。

例子:

  • hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2
  • hadoop fs -mv hdfs://nn.example.com/file1 hdfs://nn.example.com/file2 hdfs://nn.example.com/file3 hdfs://nn.example.com/dir1

返回值: 返回0为成功,-1则失败

put

使用: hadoop fs -put <localsrc> ... <dst>

从本地文件系统拷贝单个源,或者多个源到目标文件系统,也可以从标准输入写入到目标文件系统。

  • hadoop fs -put localfile /user/hadoop/hadoopfile
  • hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir
  • hadoop fs -put localfile hdfs://nn.example.com/hadoop/hadoopfile
  • hadoop fs -put - hdfs://nn.example.com/hadoop/hadoopfile Reads the input from stdin.

返回值: 返回0为成功,-1则失败

rm

使用: hadoop fs -rm [-f] [-r |-R] [-skipTrash] URI [URI ...]

删除参数指定的文件。

参数:

  • -f   强行删除。执行删除时显示对要删除的文件的分析信息,当文件不存在的时候也不会调整返回信息;
  • -R 递归的删除目录下面的所有内容
  • -r   和-R一样
  • -skipTrash 该参数会忽略回收站,如果启用,则彻底的删除,目录规模超大的时候这个选项是很有用的。如果没有用这个参数,删除的文件会在回收站中找到。

例子:

  • hadoop fs -rm hdfs://nn.example.com/file /user/hadoop/emptydir

返回值: 返回0为成功,-1则失败

rmdir

使用: hadoop fs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]

删除目录

参数:

  • --ignore-fail-on-non-empty: 当使用通配符的时候,如果一个目录还包含文件,将不会删除失败。

例子:

  • hadoop fs -rmdir /user/hadoop/emptydir

rmr

使用:hadoop fs -rmr [-skipTrash] URI [URI ...]

递归删除

注意:这个命令是过期的,可以使用fs -rm -r命令代替。

setrep

使用: hadoop fs -setrep [-R] [-w] <numReplicas> <path>

改变某个文件的复制因子,如果path是一个路径,那么这个命令就递归的修改所有文件的复制因子


参数:

  • -w 使用这个参数,命令会等待复制因子修改完成,这可能需要很长时间。
  • -R 向后兼容,没有实际效果。

例子:

[root@nn1 bin]# hadoop fs -stat "%b %F %u:%g %o %y %n %r" /fish/1.txt
14 regular file root:supergroup 134217728 2015-08-07 07:50:15 1.txt 3  //开始的副本数是3
[root@nn1 bin]# hadoop fs -setrep -w 4 /fish/1.txt  //修改副本数为4
Replication 4 set: /fish/1.txt
Waiting for /fish/1.txt ....................................................................................................................................................................................................................................................................................................................................................setrep: `/fish/1.txt': No such file or directory
[root@nn1 bin]# hadoop fs -stat "%b %F %u:%g %o %y %n %r" /fish/1.txt<pre name="code" class="java">14 regular file root:supergroup 134217728 2015-08-07 07:50:15 1.txt 4  //结束的副本数为4


返回值: 返回0为成功,-1则失败

stat

使用: hadoop fs -stat [format] <path> ...

根据文件/目录打印出指定格式的统计信息。接受的格式:所有块文件大小(%b),类型(%F),所属分组(%g),名称(%n),块大小(%o),副本数量(%r),所属用户名(%u),和修改时间(%y,%Y),%y展示“yyyy-MM-dd HH:mm:ss”格式的UTC时间,%Y则显示1970年到现在的毫秒数。如果没有指定日期格式,默认则为%y

例子:

  • hadoop fs -stat "%F %u:%g %b %y %n" /file

返回值: 返回0为成功,-1则失败

tail

使用: hadoop fs -tail [-f] URI

标准输出中,显示文件末尾的1K的内容

参数:
  •  -f 文件增长时,输出真假的内容。

例子:

  • hadoop fs -tail pathname

返回值: 返回0为成功,-1则失败

test

使用: hadoop fs -test -[defsz] URI

参数
  • -d: 如果是路径是目录,则返回0,
  • -e: 如果路径存在,则返回0.
  • -f: 如果路径是文件,则返回0.
  • -s: 如果路径不为空,返回0
  • -z: 如果文件长度为0,则返回0

例子:

  • hadoop fs -test -e filename

text

使用: hadoop fs -text <src>

将源文件输出为文本格式。允许的格式是zip和TextRecordInputStream。

touchz

使用: hadoop fs -touchz URI [URI ...]

创建一个长度为0的文件。

例子:

  • hadoop fs -touchz pathname

返回值: 返回0为成功,-1则失败

usage

Usage: hadoop fs -usage command

返回单个命令的帮助。

例子:hadoop fs -usage du

版权声明:本文为博主原创文章,未经博主允许不得转载。

Hadoop之文件系统Shell

标签:

原文地址:http://blog.csdn.net/qianshangding0708/article/details/47336061

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!