HDFS常见的Shell操作
文章目录
- HDFS常见的Shell操作
- 写在前面
- 基本语法
- HDFS命令大全
- 常用命令实操
- 准备工作
- 上传文件
- 下载文件
- HDFS直接操作
写在前面
- Hadoop版本:Hadoop-3.x
- Linux版本:CentOS7.5
HDFS的Shell操作是入门Hadoop开发的学习重点
基本语法
Shell客户端操作就是在linux的控制台中操作,shell脚本中操作,Hadoop的shell客户端的命令都在bin目录
下
hadoop fs 具体命令
或者表述为hdfs dfs 具体命令
,两个是完全相同的。
HDFS命令大全
查看HDFS的Shell命令大全
[whybigdata@node01 hadoop-3.1.3]$ bin/hadoop fs
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] <path> ...]
[-cp [-f] [-p] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] <path> ...]
[-expunge]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getfacl [-R] <path>]
[-getmerge [-nl] <src> <localdst>]
[-help [cmd ...]]
[-ls [-d] [-h] [-R] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] <localsrc> ... <dst>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
[-setfacl [-R] [{-b|-k}a {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
[-setrep [-R] [-w] <rep> <path> ...]
[-stat [format] <path> ...]
[-tail [-f] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
[-touchz <path> ...]
[-usage [cmd ...]]
- 向hdfs文件写入内容:shell命令如下(进入到Hadoop安装目录下)
echo “写入的内容” | ./bin/hdfs dfs -appendToFile - /usr/whybigdata/text.txt
- 官网Shell命令
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/FileSystemShell.html
常用命令实操
准备工作
- 启动Hadoop集群(方便后续的测试)
[whybigdata@node01 hadoop-3.1.3]$ sbin/start-dfs.sh
[whybigdata@node02 hadoop-3.1.3]$ sbin/start-yarn.sh
-help
:输出这个命令参数
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -help rm
注意:每当我们不知道命令的使用用途时,我们就可以才哦那个
-help
参数来查看命令的使用手册
上传文件
-moveFromLocal
:从本地剪切粘贴到HDFS
[whybigdata@node01 hadoop-3.1.3]$ touch kongming.txt
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -moveFromLocal ./kongming.txt /sanguo/shuguo
-copyFromLocal
:从本地文件系统中拷贝文件到HDFS路径去
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -copyFromLocal README.txt /
-appendToFile
:追加一个文件到已经存在的文件末尾
[whybigdata@node01 hadoop-3.1.3]$ touch liubei.txt
[whybigdata@node01 hadoop-3.1.3]$ vim liubei.txt
- 输入以下内容
san gu mao lu
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -appendToFile liubei.txt /sanguo/shuguo/kongming.txt
-put
:等同于copyFromLocal
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -put ./liubei.txt /user/whybigdata/test/
下载文件
-copyToLocal
:从HDFS拷贝到Linux本地
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -copyToLocal /sanguo/shuguo/kongming.txt ./
-get
:等同于copyToLocal
,就是从HDFS下载文件到本地
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -get /sanguo/shuguo/kongming.txt ./
-getmerge
:合并下载
多个文件,比如HDFS的目录 /user/whybigdata/test下有多个文件:log.1, log.2,log.3,…
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -getmerge /user/whybigdata/test/* ./merge.txt
HDFS直接操作
-ls
: 显示目录信息
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -ls /
-mkdir
:在HDFS上创建新的目录
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -mkdir -p /sanguo/shuguo
-cat
:查看指定文件的内容
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -cat /sanguo/shuguo/kongming.txt
-chgrp
、-chmod
、-chown
:和Linux文件系统中的用法一样,用于修改文件所属权限
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -chmod 666 /sanguo/shuguo/kongming.txt
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -chown whybigdata: whybigdata /sanguo/shuguo/kongming.txt
注意:用
-R
选项,可以在目录结构中进行递归
修改。同时修改文件权限的用户必须是该文件的所有者,否则就是超级用户。
-cp
:从HDFS的一个路径拷贝到HDFS的另一个路径
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -cp /sanguo/shuguo/kongming.txt /zhuge.txt
-mv
:在HDFS目录中移动文件的位置
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -mv /zhuge.txt /sanguo/shuguo/
-tail
:显示一个文件的末尾1kb的数据
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -tail /sanguo/shuguo/kongming.txt
-rm
:删除文件或文件夹
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -rm /user/whybigdata/test/jinlian2.txt
-r
选项表示强制删除,慎重使用
-rmdir
:删除空目录
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -mkdir /test
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -rmdir /test
-du
统计文件夹的大小信息;参数选项说明如下:
-s
选项将导致显示文件长度的总和
,而不是单个文件。在没有-s
选项的情况下,计算是通过从给定的路径深入到1层来完成的。-h
选项将以人类可读
的方式格式化
文件大小(例如,64.0m而不是67108864)。-v
选项将以标题行的形式显示列的名称
。-x
选项将把快照从结果计算中排除。如果没有-x选项(默认),结果总是从所有的IN节点计算出来的,包括给定路径下的所有快照。
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -du -s -h /user/whybigdata/test
2.7 K /user/whybigdata/test
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -du -h /user/whybigdata/test
2.3 K /user/whybigdata/test/README.txt
15 K /user/whybigdata/test/jinlian.txt
1.4 K /user/whybigdata/test/merge.txt
du返回三栏,格式如下:
文件大小 消耗的磁盘空间和所有复制的磁盘空间 文件的全路径名称
-setrep
:设置HDFS中文件的副本数量
[whybigdata@node01 hadoop-3.1.3]$ hadoop fs -setrep 10 /sanguo/shuguo/kongming.txt
这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。
全文结束!