千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > HDFS的常用shell命令详解

HDFS的常用shell命令详解

来源:千锋教育
发布人:qyf
时间: 2023-02-27 17:20:00 1677489600

HDFS的常用shell命令详解

  注意:访问hdfs系统的指令

  hadoop dfs --- 已过时

  hadoop fs -- 使用范围更大

  hdfs dfs --范围相对较小

  hadoop fs 和 hdfs dfs之间没有太大的区别

  1. 在命令行中输入hdfs,回车后,就会提示hdfs后可以使用哪些命令,其中有一个是dfs。

  2. 在命令行中输入hdfs dfs,回车后,就会提示dfs后可以添加的一些常用shell命令

  常用shell命令

  注意:分布式文件系统的路径在命令行中 要从/开始写,即绝对路径

  1. 创建目录

  [-mkdir [-p]...]#在分布式文件系统上创建目录 -p,多层级创建

  调用格式:hdfs dfs -mkdir(-p) /目录

  2. 上传指令

  [-put [-f] [-p] [-l]...] #将本地文件系统的文件上传到分布式文件系统

  调用格式:hdfs dfs -put/本地文件 /hadoop

  注意:

  1)/hadoop是hdfs上面的路径的减缩版,全称是:hdfs://namenode的名字:分布式文件系统的端口号/hadoop 例如:hdfs://master:9000/hadoop

  2)hadoop作为文件,在操作之前是可以不存在的.

  [-moveFromLocal...]#将本地文件系统的文件上传到分布式文件系统

  调用格式:同put

  注意:这里是将本地文件剪切到分布式文件系统

  [-copyFromLocal [-f] [-p] [-l]...]

  调用格式:同put

  注意:这里是将本地文件拷贝到分布式文件系统

  3. 查看指令

  [-ls [-d] [-h] [-R] [...]]#查看分布式文件系统的目录里内容

  调用格式:hdfs dfs -ls/

  [-cat [-ignoreCrc]...] #查看分布式文件系统的文件内容

  调用格式:hdfs dfs -cat/xxx.txt

  [-tail [-f]]#查看分布式文件系统的文件内容

  调用格式:hdfs dfs -tail/xxx.txt

  注意:默认最多查看1000行

  4. 下载指令

  [-copyToLocal [-p] [-ignoreCrc] [-crc]...]

  调用格式:hdfs dfs -copyToLocal/hdfs上的路径 /本地路径 例如:hdfs dfs -copyToLocal/hadoop /root/hadooptest

  注意:

  1)本地路径的文件夹可以不存在

  2)这里是将hadoop整体拷贝到线下路径中

  [-moveToLocal]

  注意:从hdfs的某个路径将数据剪切到本地,已经被遗弃了.不能使用.

  [-get [-p] [-ignoreCrc] [-crc]...]

  调用格式:同copyToLocal

  5. 删除指令

  [-rm [-f] [-r|-R] [-skipTrash]...]

  调用格式:hdfs dfs -rm-r/hadoop

  注意:如果删除文件夹需要加-r

  [-rmdir [--ignore-fail-on-non-empty]

...]

  调用格式:hdfs dfs -rmdir/hadoop

  注意:hadoop必须是空文件夹,如果非空必须使用rm删除

  6. 查看磁盘利用率和文件大小

  [-df [-h] [...]] 查看分布式系统的磁盘使用情况

  调用格式:hdfs dfs -df/

  [-du [-s] [-h]...]#查看分布式系统上当前路径下文件的情况-h:human 以人类可读的方式显示

  调用格式:hdfs dfs -du/hadoop

  7. 向分布式文件系统中的文件里追加内容

  [-appendToFile...]

  调用格式: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]...]

  调用格式:hadoop fs -setrep 3/ 将hdfs根目录及子目录下的内容设置成3个副本

  注意:当设置的副本数量与初始化时默认的副本数量不一致时,集群会作出反应,比原来多了会自动进行复制.

  10. 查看文件的状态

  hdfs dfs [generic options] -stat[format]...

  命令的作用:当向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]

  参数说明: -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...

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

  13. 显示当前文件夹及子文件夹的数量 子文件的数量以及 总大小

  hdfs dfs [generic options] -count[-q] [-h]...

  调用格式:hdfs dfs -count /hadoop

  14. 合并下载

  hdfs dfs [generic options] -getmerge[-nl]

  调用格式:hdfs dfs -getmergehdfs上面的路径 本地的路径

  实例:hdfs dfs -getmergo/hadoopdata/*.xml /root/test.test

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

  hdfs dfds [generic options] -mv...

  调用格式: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]]...

  调用格式:hdfs dfs -cp/hdfs路径_1 /hdfs路径_2

  17.设置Hadoop回收站trash: 当我们不小心删掉文件时,还有后悔药吃.

  17.1 修改conf/core-site.xml文件

  注意:我们需要在namenode和datanode同时设置垃圾回收,如果namenode可以使用,

  datanode 的无效,如果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@master sbin]# hadoop fs -ls /user/root/.Trash/

  19/09/07 05:15:42 WARN util.NativeCodeLoader: Unable to load native-hadoop library foryour platform... using builtin-java classes where applicable

  Found 2items

  drwx------ -root supergroup 02019-09-0704:36 /user/root/.Trash/190907043825

  drwx------ -root supergroup 02019-09-0705: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@master sbin]# hadoop fs -rm -r /hadoop4.txt

  19/09/07 05:15:24 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval =1440minutes, Emptier interval =0minutes.

  Moved: 'hdfs://master:9000/hadoop4.txt'to trash at: hdfs://master:9000/user/root/.Trash/Current

  例如:

  fs.trash.interval =120(deletion interval =2hours)

  fs.trash.checkpoint.interval =60(emptier interval =1hour)

  说明:

  这导致NameNode为Current目录下的垃圾文件每小时创建一个新的检查点,并删除已经存在超过2个小时的检查点。

  在回收站生命周期结束后,NameNode从HDFS命名空间中删除该文件。删除文件会导致与文件关联的块被释放。请注意,用户删除文件的时间与HDFS中相应增加可用空间的时间之间可能存在明显的时间延迟,即用户删除文件,HDFS可用空间不会立马增加,中间有一定的延迟。

  五:expunge 清空回收站

  要想使用这个命令,首先得有回收站,即fs.trash.interval的值不能为0

  当我们执行expunge命令时,其实是会立刻创建一个新的检查点,并将/.Trash/Current中的内容立刻放入这个检查点.

  实例: [root@master sbin]# hadoop fs -expunge

  19/09/07 05:15:58 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval =1440minutes, Emptier interval =0minutes.

  19/09/07 05:15:58 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/root/.Trash/190907051558

  

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

  [root@master sbin]# hadoop fs -rm -skipTrash /hadoop111.txt

  19/09/07 05:50:13 WARN util.NativeCodeLoader: Unable to load native-hadoop library foryour platform... using builtin-java classes where applicable

  Deleted /hadoop111.txt

  17.2.测试

  1)新建目录input

  [root@master:/data/soft]# hadoop fs -mkdir /input

  2)上传文件

  [root@master:/data/soft]# hadoop fs -copyFromLocal /data/soft/file0* /input

  3)删除目录input

  [root@master data]# hadoop fs -rmr /input

  Moved to trash: hdfs://master:9000/user/root/input

  4)参看当前目录

  [root@master data]# hadoop fs -ls

  Found 2items

  drwxr-xr-x -root supergroup 02011-02-1222:17 /user/root/.Trash

  发现input删除,多了一个目录.Trash

  5)恢复刚刚删除的目录

  [root@master data]# hadoop fs -mv /user/root/.Trash/Current/user/root/input /user/root/input

  6)检查恢复的数据

  [root@master data]# hadoop fs -ls input

  Found 2items

  -rw-r--r--3root supergroup 222011-02-1217:40 /user/root/input/file01

  -rw-r--r--3root supergroup 282011-02-1217:40 /user/root/input/file02

  7)删除.Trash目录(清理垃圾)

  [root@master data]# hadoop fs -rmr .Trash

  Deleted hdfs://master:9000/user/root/.Trash

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT