zoukankan      html  css  js  c++  java
  • Hadoop之文件系统Shell

    概述: 

    文件系统(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),所属username(%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

  • 相关阅读:
    5.3 员工管理系统之登录和过滤器
    5.2 员工管理系统之页面国际化
    5.1 员工管理系统之导入静态资源
    5.0 Thymeleaf表达式使用
    1.初识Hadoop
    左耳朵耗子谈直面焦虑和成长
    10.高性能JavaScript
    9.高可维护性的JavaScript
    springboot整合jsp踩坑
    springboot 上传图片与回显
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6994616.html
Copyright © 2011-2022 走看看