HDFS中的Shell操作

HDFS中的Shell操作

HDFS其实就是一个分布式的文件系统,我们可以使用一些命令来操作这个分布式文件系统上的文
件。
- 访问HDFS的命令:
hadoop dfs --- 已过时
hadoop fs -- 使用范围更大
hdfs dfs --范围相对较小
hadoop fs 和 hdfs dfs之间没有太大的区别
- 小技巧
1. 在命令行中输入hdfs,回车后,就会提示hdfs后可以使用哪些命令,其中有一个是dfs。
2. 在命令行中输入hdfs dfs,回车后,就会提示dfs后可以添加的一些常用shell命令。
- 注意事项
分布式文件系统的路径在命令行中,要从/开始写,即绝对路径。
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.查看磁盘利用率和文件大小
[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
注意:如果删除文件夹需要加-r
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
注意:必须是空文件夹,如果非空必须使用rm删除
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] -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
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 /root/test.test
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@qianfeng01 sbin]# hadoop fs -ls /user/root/.Trash/
19/09/07 05:15:42 WARN util.NativeCodeLoader: Unable to load nativehadoop library for your platform... using builtin-java 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@qianfeng01 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 = 1 hour)
说明:
这导致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@qianfeng01 sbin]# hadoop fs -rm -skipTrash /hadoop111.txt
19/09/07 05:50:13 WARN util.NativeCodeLoader: Unable to load nativehadoop library for your platform... using builtin-java classes where
applicable
Deleted /hadoop111.txt2.测试
1)新建目录input
[root@qianfeng01:/data/soft]# hadoop fs -mkdir /input
2)上传文件
[root@qianfeng01:/data/soft]# hadoop fs -copyFromLocal
/data/soft/file0* /input
3)删除目录input
[root@qianfeng01 data]# hadoop fs -rmr /input
Moved to trash: hdfs://qianfeng01:9000/user/root/input
4)参看当前目录
[root@qianfeng01 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@qianfeng01 data]# hadoop fs -mv
/user/root/.Trash/Current/user/root/input /user/root/input
6)检查恢复的数据
[root@qianfeng01 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@qianfeng01 data]# hadoop fs -rmr .Trash
Deleted hdfs://qianfeng01:9000/user/root/.Trash
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值