HDFS的Shell操作
2021/7/18 7:09:40
本文主要是介绍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
这篇关于HDFS的Shell操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14动态路由项目实战:从入门到上手
- 2024-11-14函数组件项目实战:从入门到简单应用
- 2024-11-14获取参数项目实战:新手教程与案例分析
- 2024-11-14可视化开发项目实战:新手入门教程
- 2024-11-14可视化图表项目实战:从入门到实践
- 2024-11-14路由懒加载项目实战:新手入门教程
- 2024-11-14路由嵌套项目实战:新手入门教程
- 2024-11-14全栈低代码开发项目实战:新手入门指南
- 2024-11-14全栈项目实战:新手入门教程
- 2024-11-14useRequest教程:新手快速入门指南