HDFS常见的Shell操作

举报
WHYBIGDATA 发表于 2023/03/18 08:33:29 2023/03/18
【摘要】 HDFS常见的Shell操作

HDFS常见的Shell操作



写在前面

  • Hadoop版本:Hadoop-3.x
  • Linux版本:CentOS7.5

HDFS的Shell操作是入门Hadoop开发的学习重点

基本语法

Shell客户端操作就是在linux的控制台中操作,shell脚本中操作,Hadoop的shell客户端的命令都在bin目录

hadoop fs 具体命令 或者表述为 hdfs dfs 具体命令,两个是完全相同的。

0.png

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

1.png

这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。

全文结束!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。