@[toc]
基本语法
hadoop fs 具体命令
或
hdfs dfs 具体命令
两个操作执行结果是完全相同的。
命令大全
常用命令实操
准备工作
(1)启动 Hadoop 集群
我的上篇文章写了如何启动Hadoop集群
(2)创建 /sanguo 文件夹
[mq@hadoop102 ~]$ hadoop fs -mkdir /sanguo
这时候在客户端中就可以看到新建的文件夹了:
http://hadoop102:9870
上传
(1) -moveFromLocal
:把本地的文件移动到HDFS(从本地剪切粘贴到HDFS)
hadoop fs -moveFromLocal 本地文件路径 客户端路径
准备工作:
[mq@hadoop102 hadoop-3.1.3]$ vim shuguo.txt
输入:
shuguo
保存退出
但这时候客户端里并没有 shuguo.txt 文件
所以就要把本地的文件移动到HDFS
实战操作:
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -moveFromLocal ./shuguo.txt /sanguo
刷新一下网页一看
文件果然到客户端上了
再看看本地
刚才他俩之间的 shuguo.txt 没有了,实现了文件的移动而非文件的复制。
(2) -copyFromLocal
:把本地的文件复制(拷贝)到 HDFS 路径中
hadoop fs -copyFromLocal 本地文件路径 客户端路径
实战操作:
[mq@hadoop102 hadoop-3.1.3]$ vim weiguo.txt
文件中输入:weiguo
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -copyFromLocal weiguo.txt /sanguo
因为是 copy ,所以本地的 weiguo.txt 不会删掉
(3) -put
:等同于 copyFromLocal
hadoop fs -put 本地文件路径 客户端路径
生产环境中更习惯用 put ,简洁!
实战操作:
[mq@hadoop102 hadoop-3.1.3]$ vim wuguo.txt
文件中输入:wuguo
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -put wuguo.txt /sanguo
(4) -appendToFile
:在一个文件末尾追加内容 —— 把本地文件中的内容追加到HDFS中指定文件的末尾
hadoop fs -appendToFile 本地文件路径 客户端路径
这就要提一嘴HDFS的缺点了:HDFS不允许修改文件内容,只能在文件末尾追加。
实战操作:
[mq@hadoop102 hadoop-3.1.3]$ vim liubei.txt
文件中输入:liubei
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -appendToFile liubei.txt /sanguo/shuguo.txt
文件末尾加了 liubei
下载
(1) -copyToLocal
:从HDFS上,把文件复制(拷贝)到本地
hadoop fs -copyToLocal 客户端路径 本地文件路径
实战操作:
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -copyToLocal /sanguo/shuguo.txt ./
此时本地上也有,集群上也有。
(2) -get
:等同于 copyToLocal ,生成环境更习惯用 get
hadoop fs -get 客户端路径 本地文件路径
实战操作:
提一嘴,在下载过程中也能修改名字
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -get /sanguo/shuguo.txt ./shuguo2.txt
把下载下来的 shuguo.txt ,改名为 shuguo2.txt 保存
HDFS直接操作
(1) -ls
:显示目录信息
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -ls /
Found 6 items
drwxr-xr-x - mq supergroup 0 2022-07-03 13:57 /input
drwxr-xr-x - mq supergroup 0 2022-07-03 13:58 /output
drwxr-xr-x - mq supergroup 0 2022-07-06 00:01 /sanguo
drwx------ - mq supergroup 0 2022-07-03 23:27 /tmp
drwxr-xr-x - mq supergroup 0 2022-07-03 12:31 /wcinput
drwxr-xr-x - mq supergroup 0 2022-07-03 13:35 /wcoutput
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -ls /sanguo
Found 3 items
-rw-r--r-- 3 mq supergroup 14 2022-07-06 00:10 /sanguo/shuguo.txt
-rw-r--r-- 3 mq supergroup 7 2022-07-05 23:57 /sanguo/weiguo.txt
-rw-r--r-- 3 mq supergroup 6 2022-07-06 00:01 /sanguo/wuguo.txt
(2) -cat
:显示文件内容
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -cat /sanguo/shuguo.txt
2022-07-06 11:08:07,106 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
shuguo
liubei
(3) -chmod 、-chown 、-chgrp
:跟Linux的文件系统用法一样,修改文件所属权限
这些就分别对应 chmod(change mod)、chown(change owner)、chgrp(change group)
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -chmod 777 /sanguo/shuguo.txt
(4) -mkdir
:创建路径(文件夹)
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /jinguo
(5) -cp
:从 HDFS 的一个路径复制(拷贝)到 HDFS 的另一个路径
把 shuguo.txt 文件复制到 jinguo 文件夹中
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -cp /sanguo/shuguo.txt /jinguo
因为是复制,所以原 /sanguo 文件夹下的 shuguo.txt 依然存在
(6) -mv
:在 HDFS 目录中移动文件
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /sanguo/weiguo.txt /jinguo
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /sanguo/wuguo.txt /jinguo
sanguo 文件夹下只剩 shuguo.txt 了,因为它是复制,其他俩是移动
jinguo 文件夹下都有了
(7) -tail
:显示一个文件的末尾 1kb 的数据
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -tail /jinguo/shuguo.txt
2022-07-06 14:17:36,235 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
shuguo
liubei
(8) -rm
:删除文件或文件夹
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -rm /sanguo/shuguo.txt
Deleted /sanguo/shuguo.txt
(9) -rm -r
:递归删除目录及目录里面的内容
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -rm -r /sanguo
Deleted /sanguo
(10) -du
:统计文件夹的大小
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -du -s -h /jinguo
27 81 /jinguo
说明:
27 表示文件大小;81表示 27*3 个副本;/jinguo 表示查看的目录
-s 表示总计,只列出最后相加总的值 ;-h 以 k、M、G为单位,提高信息的可读性
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -du -h /jinguo
14 42 /jinguo/shuguo.txt
7 21 /jinguo/weiguo.txt
6 18 /jinguo/wuguo.txt
查看具体的细节,就不要加 -s
(11) -setrep
:设置 HDFS 中文件的副本数量
[mq@hadoop102 hadoop-3.1.3]$ hadoop fs -setrep 10 /jinguo/shuguo.txt
这里设置的副本数量只是记录在 NameNode 的元数据中,是否真的会有这么多副本,还得看 DataNode 的数量。因为目前只有 3 台设备,最多也就3个副本,只有节点数增加到 10 台时,副本数才能达到 10 。