HDFS的Shell操作

目录

1. 创建⽬录

 2. 上传指令

 3. 查看指令

 4. 下载指令

5. 删除命令

6. 查看磁盘利⽤率和⽂件⼤⼩

7. 向分布式⽂件系统中的⽂件⾥追加内容

8. 修改权限的

9. 修改⽂件的副本数

10. 查看⽂件的状态

11. 测试

12. 创建空⽂件

13. 显示当前⽂件夹及⼦⽂件夹的数量

14. 合并下载

15. 移动hdfs中的⽂件(更名)

16. 复制hdfs中的⽂件到hdfs的另⼀个⽬录

17. 设置Hadoop回收站trash


1. 创建⽬录

[-mkdir [-p] <path> ...] # 在分布式⽂件系统上创建⽬录 -p, 多层级创建 调⽤格式 : hdfs dfs -mkdir (-p) / ⽬录 例如 : - hdfs dfs -mkdir /data - hdfs dfs -mkdir -p /data/a/b/c

 2. 上传指令

[-put [-f] [-p] [-l] <localsrc> ... <dst>] # 将本地⽂件系统的⽂件 上传到分布式⽂件系统 调⽤格式 :hdfs dfs -put / 本地⽂件 / 分布式⽂件系统路径 注意 : 直接写 / 是省略了⽂件系统的名称 hdfs://ip:port 。 例如 :         - hdfs dfs -put /root/a.txt /data/         - hdfs dfs -put /root/logs/* /data/ 其他指令 : [-moveFromLocal <localsrc> ... <dst>] # 将本地⽂件系统的⽂ 件上传到分布式⽂件系统 [-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]

 3. 查看指令

[-ls [-d] [-h] [-R] [<path> ...]] # 查看分布式⽂件系统的⽬录⾥内容 调⽤格式 :hdfs dfs -ls / [-cat [-ignoreCrc] <src> ...] # 查看分布式⽂件系统的⽂件内容 调⽤格式 :hdfs dfs -cat /xxx.txt [-tail [-f] <file>] # 查看分布式⽂件系统的⽂件内容 调⽤格式 :hdfs dfs -tail /xxx.txt 注意 : 默认最多查看 1000 ⾏

 4. 下载指令

[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] 注意 : 本地路径的⽂件夹可以不存在 [-moveToLocal <src> <localdst>] 注意 : 从 hdfs 的某个路径将数据剪切到本地 , 已经被遗弃了 [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] 调⽤格式 : 同 copyToLocal

5. 删除命令

[-rm [-f] [-r|-R] [-skipTrash] <src> ...] 注意 : 如果删除⽂件夹需要加 -r [-rmdir [--ignore-fail-on-non-empty] <dir> ...] 注意 : 必须是空⽂件夹 , 如果⾮空必须使⽤ rm 删除

6. 查看磁盘利⽤率和⽂件⼤⼩

[-df [-h] [<path> ...]] 查看分布式系统的磁盘使⽤情况 [-du [-s] [-h] <path> ...] # 查看分布式系统上当前路径下⽂件的情况 -h : human 以⼈类可读的⽅式显示

7. 向分布式⽂件系统中的⽂件⾥追加内容

[-appendToFile <localsrc> ... <dst>] 调⽤格式 :hdfs dfs -appendToFile 本地⽂件 hdfs 上的⽂件 注意 : 不⽀持在中间随意增删改操作

8. 修改权限的

跟本地的操作⼀致 ,-R 是让⼦⽬录或⽂件也进⾏相应的修改 [-chgrp [-R] GROUP PATH...] [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...] [-chown [-R] [OWNER][:[GROUP]] PATH...]

9. 修改⽂件的副本数

[-setrep [-R] [-w] <rep> <path> ...] 调⽤格式 :hadoop fs -setrep 3 / 将 hdfs 根⽬录及⼦⽬录下的内容设置成 3 个 副本 注意 : 当设置的副本数量与初始化时默认的副本数量不⼀致时 , 集群会作出反应 , ⽐原来多 了会⾃动进⾏复制.

10. 查看⽂件的状态

hdfs dfs [generic options] -stat [format] <path> ... 命令的作⽤ : 当向 hdfs 上写⽂件时,可以通过 dfs.blocksize 配置项来设置⽂件的 block的⼤⼩。这就导致了 hdfs 上的不同的⽂件 block 的⼤⼩是不相同的。有时候想知 道hdfs 上某个⽂件的 block ⼤⼩,可以预先估算⼀下计算的 task 的个数。 stat 的意 义:可以查看⽂件的⼀些属性。 调⽤格式 :hdfs dfs -stat [format] ⽂件路径 format 的形式: %b :打印⽂件的⼤⼩(⽬录⼤⼩为 0 ) %n :打印⽂件名 %o :打印 block 的 size %r :打印副本数 %y : utc 时间 yyyy-MM-dd HH:mm:ss %Y :打印⾃ 1970 年 1 ⽉ 1 ⽇以来的 utc 的微秒数 %F :⽬录打印 directory ,⽂件打印 regular file 注意 : 1) 当使⽤ -stat 命令但不指定 format 时,只打印创建时间,相当于 %y 2)-stat 后⾯只跟⽬录 ,%r,%o 等打印的都是 0, 只有⽂件才有副本和⼤⼩

11. 测试

hdfs dfs [generic options] -test -[defsz] <path> 参数说明 : -e: ⽂件是否存在 存在返回 0 -z: ⽂件是否为空 为空返回 0 -d: 是否是路径 ( ⽬录 ) , 是返回 0 调⽤格式 :hdfs dfs -test -d ⽂件 实例 :hdfs dfs -test -d /shelldata/111.txt && echo "OK" || echo "no" 解释 : 测试当前的内容是否是⽂件夹 , 如果是返回 ok, 如果不是返回 no

12. 创建空⽂件

hdfs dfs [generic options] -touchz <path> ...

调⽤格式 :hdfs dfs touchz /hadooptest.txt

13. 显示当前⽂件夹及⼦⽂件夹的数量

hdfs dfs [generic options] -count [-q] [-h] <path> ...

调⽤格式 :hdfs dfs -count /hadoop

14. 合并下载

hdfs dfs [generic options] -getmerge [-nl] <src> <localdst> 调⽤格式 :hdfs dfs -getmerge hdfs 上⾯的路径 本地的路径 实例 :hdfs dfs -getmerge /hadoopdata/*.xml

15. 移动hdfs中的⽂件(更名)

hdfs dfds [generic options] -mv <src> ... <dst> 调⽤格式 :hdfs dfs -mv /hdfs 的路径 1 /hdfs 的另⼀个路径 2 实例 :hfds dfs -mv /aaa /bbb 这⾥是将 aaa 整体移动到 bbb 中

16. 复制hdfs中的⽂件到hdfs的另⼀个⽬录

hdfs dfs [generic options] -cp [-f] [-p | -p[topax]] <src> ... <dst> 调⽤格式 :hdfs dfs -cp /hdfs 路径 _1 /hdfs 路径 _2

17. 设置Hadoop回收站trash

1 修改core-site.xml⽂件
     注意:我们需要在namenode和datanode同时设置垃圾回收
     <property>
         <name>fs.trash.interval</name>
         <!-- 1440分钟后检查点会被清除,如果为0,垃圾回收站不会启⽤. -->
         <value>1440</value>
     </property>
     <property> 
         <name>fs.trash.checkpoint.interval</name> 
         <value>0</value>
     </property>
 解释:
 ⼀:检查点:
     执⾏下⾯的语句后出现的.Trash/190907043825就是检查点
     [root@hadoop01 sbin]# hadoop fs -ls /user/root/.Trash/
     19/09/07 05:15:42 WARN util.NativeCodeLoader: Unable to
load native-hadoop library for your platform... using builtinjava classes where applicable
     Found 2 items
     drwx------ - root supergroup 0 2019-09-07   04:36 /user/root/.Trash/190907043825
     drwx------ - root supergroup 0 2019-09-07   05:15 /user/root/.Trash/Current
 ⼆:fs.trash.interval
     分钟数,当超过这个分钟数后检查点会被删除。如果为零,回收站功能将被禁⽤。默认是0.单位分钟。这⾥我设置的是1天(60*24)
     删除数据rm后,会将数据move到当前⽂件夹下的.Trash/current⽬录
 三:fs.trash.checkpoint.interval 
     检查点创建的时间间隔(单位为分钟)。其值应该⼩于或等于fs.trash.interval。如果为零,则将该值设置为fs.trash.interval的值。
 四:删除过程分析
    这⾥的Deletion interval表示检查点删除时间间隔(单位为分钟)
     这⾥的Emptier interval表示在运⾏线程来管理检查点之前,NameNode需要等待多⻓时间(以分钟为单位),即检查点创建时间间隔.NameNode删除超过fs.trash.interval的检查点,并为/user/${username}/.Trash/Current创建⼀个新的检查点。该频率由fs.trash.checkpoint.interval的值确定,且不得⼤于Deletion interval。这确保了在emptier窗⼝内回收站中有⼀个或多个检查点。

     [root@hadoop01 sbin]# hadoop fs -rm -r /hadoop4.txt
     19/09/07 05:15:24 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 1440 minutes, Emptier interval = 0 minutes.
    
     Moved: 'hdfs://qianfeng01:9000/hadoop4.txt' to trash at:hdfs://qianfeng01:9000/user/root/.Trash/Current
     例如:
     fs.trash.interval = 120 (deletion interval = 2 hours)
     fs.trash.checkpoint.interval = 60 (emptier interval = 1hour)

     说明:
     这导致NameNode为Current⽬录下的垃圾⽂件每⼩时创建⼀个新的检查点,并删除已经存在超过2个⼩时的检查点。
     在回收站⽣命周期结束后,NameNode从HDFS命名空间中删除该⽂件。删除⽂件会导致与⽂件关联的块被释放。请注意,⽤户删除⽂件的时间与HDFS中相应增加可⽤空间的时间之间可能存在明显的时间延迟,即⽤户删除⽂件,HDFS可⽤空间不会⽴⻢增加,中间有⼀定的延迟。

 五:expunge 清空回收站
     要想使⽤这个命令,⾸先得有回收站,即fs.trash.interval的值不能为0
     当我们执⾏expunge命令时,其实是会⽴刻创建⼀个新的检查点,并 将/.Trash/Current中的内容⽴刻放⼊这个检查点.
     实例: [root@qianfeng01 sbin]# hadoop fs -expunge
     19/09/07 05:15:58 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 1440 minutes, Emptier interval = 0 minutes.
     19/09/07 05:15:58 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/root/.Trash/190907051558

 六:如果想绕过垃圾回收站并⽴即从⽂件系统中删除⽂件。可以执⾏ hadoop fs -rm -skipTrash

    [root@hadoop01 sbin]# hadoop fs -rm -skipTrash /hadoop111.txt
     19/09/07 05:50:13 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtinjava classes where applicable
     Deleted /hadoop111.txt


2.测试
     1)新建⽬录input
         [root@hadoop01:/data/soft]# hadoop fs -mkdir /input

     2)上传⽂件
     [root@hadoop01:/data/soft]# hadoop fs -copyFromLocal /data/soft/file0* /input

     3)删除⽬录input
     [root@hadoop01 data]# hadoop fs -rmr /input
     Moved to trash: hdfs://qianfeng01:9000/user/root/input

     4)参看当前⽬录
     [root@hadoop01 data]# hadoop fs -ls
     Found 2 items
     drwxr-xr-x - root supergroup 0 2011-02-12 22:17 /user/root/.Trash
     发现input删除,多了⼀个⽬录.Trash

     5)恢复刚刚删除的⽬录
     [root@hadoop01data]# hadoop fs -mv
    /user/root/.Trash/Current/user/root/input /user/root/input
     6)检查恢复的数据
     [root@hadoop01 data]# hadoop fs -ls input
     Found 2 items
     -rw-r--r-- 3 root supergroup 22 2011-02-12 17:40 /user/root/input/file01
     -rw-r--r-- 3 root supergroup 28 2011-02-12 17:40 /user/root/input/file02
     7)删除.Trash⽬录(清理垃圾)
     [root@hadoop01data]# hadoop fs -rmr .Trash
     Deleted hdfs://hadoop01:9000/user/root/.Trash


上一篇:2021-04-02


下一篇:@RequestParam 出现的数据丢失