HDFS Shell 操作

HDFS是存取数据的分布式文件系统,那么对HDFS的操作,就是对文件系统的基本操作,即文件及文件夹的增删改查、权限修改,HDFS提供了一套自己的shell命令来进行操作,类似于我们linux系统中的shell命令。

我们在执行HDFS 的shell命令时,要确认hadoop是正常运行的,可以通过命令jps来查看进程,查看hadoop当前是否是正常运行。

执行如下命令,我们来查看一下HDFS 的shell 支持的所有命令

$ hadoop fs
Usage: hadoop fs [generic options]
    [-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] [-l] <localsrc> ... <dst>]
    [-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
    [-count [-q] [-h] <path> ...]
    [-cp [-f] [-p | -p[topax]] <src> ... <dst>]
    [-createSnapshot <snapshotDir> [<snapshotName>]]
    [-deleteSnapshot <snapshotDir> <snapshotName>]
    [-df [-h] [<path> ...]]
    [-du [-s] [-h] <path> ...]
    [-expunge]
    [-find <path> ... <expression> ...]
    [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
    [-getfacl [-R] <path>]
    [-getfattr [-R] {-n name | -d} [-e en] <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] [-l] <localsrc> ... <dst>]
    [-renameSnapshot <snapshotDir> <oldName> <newName>]
    [-rm [-f] [-r|-R] [-skipTrash] <src> ...]
    [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
    [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
    [-setfattr {-n name [-v value] | -x name} <path>]
    [-setrep [-R] [-w] <rep> <path> ...]
    [-stat [format] <path> ...]
    [-tail [-f] <file>]
    [-test -[defsz] <path>]
    [-text [-ignoreCrc] <src> ...]
    [-touchz <path> ...]
    [-truncate [-w] <length> <path> ...]
    [-usage [cmd ...]]

在浏览器中访问hadoop(http://node1:50070),选择Browse the file system,查看hadoop的文件系统

这里写图片描述

这里写图片描述

上图中可以看到目前hdfs中目前是没有任务文件的,之后我们操作的文件它都是存放在了datanode节点上,对应的目录如下(红色部分为hadoop的安装目录)
/usr/local/hadoop/tmp/dfs/data/current/BP-303305924-192.168.242.161-1500563001399/current/finalized

Shell 常用命令

1-ls:显示当前目录结构

如果命令选项后没有路径,那么会访问/usr/<用户>目录,创建该目录后就不会再提示没有文件或目录

[hadoop@node1 ~]$ hadoop fs -ls
ls: `.': No such file or directory

查看hdfs文件系统根目录下的目录和文件

[hadoop@node1 ~]$ hadoop fs -ls /

查看hdfs文件系统所有的目录和文件

[hadoop@node1 ~]$ hadoop fs -ls -R /

2 -put:上传文件

[hadoop@node1 ~]$ echo hello hadoop ha cluster > hello.txt        # 在linux上创建一个hello.txt文件
[hadoop@node1 ~]$ ll
总用量 4
-rw-rw-r-- 1 hadoop hadoop 24 722 18:50 hello.txt
[hadoop@node1 ~]$ hadoop fs -put hello.txt /      # 将本地文件hello.txt上传到hdfs的根目录下
[hadoop@node1 ~]$ hadoop fs -ls /         # 查看hdfs根目录下所有文件
Found 1 items
-rw-r--r--   3 hadoop supergroup         24 2017-07-22 18:51 /hello.txt

在浏览器图形界面中查看

这里写图片描述

3-cat:查看文件内容

[hadoop@node1 ~]$ hadoop fs -cat /hello.txt       # 查看hello.txt文件内容
hello hadoop ha cluster

hdfs文件存放在datanode节点上,我们来看下(文件块的数据备份个数,默认是3,在hdfs-site.xml中配置dfs.replication来修改副本数量)

这里写图片描述

上图中可以看到文件的所有内容,但文件并没有被切块,即分块存储,原因是因为hadoop2.x版本中文件超过128M后,才会分块存储,下面我们来上传一个大文件。上传jdk安装包到hdfs根目录下

[hadoop@node1 ~]$ ll
总用量 166000
-rw-r--r-- 1 hadoop hadoop 169983496 57 17:07 jdk-8u131-linux-x64.rpm
[hadoop@node1 ~]$ hadoop fs -put jdk-8u131-linux-x64.rpm /

查看上传完成后的文件

这里写图片描述

然后我们再去datanode节点中查看该文件是否已被分块存储(被分成两个块存储)

这里写图片描述

我们上传后的文件超过了128M,hdfs会帮我们分块存储,即将0-128M之间的文件内容存放到一个文件中,128M-162M的内容存放到另一个文件中。

4-get:下载文件

我们刚刚把本地的jdk安装包上传到了hdfs,现在把本地的删除,从hdfs上下载到本地
从hdfs下载jdk文件时,hdfs并没有返回给我两个块文件,而是返回了一个jdk的安装包文件,其实我们在下载的过程中hdfs是先从第一个文件传输,第一个文件传输完成后,再传输第二个文件。最终我们获得了一个完整的jdk安装包文件。

[hadoop@node1 ~]$ hadoop fs -get /jdk-8u131-linux-x64.rpm

这里写图片描述

5-mkdir:创建文件夹

如果是多级目录需要加 -p 参数
在hdfs中创建文件夹 /workcount/input

[hadoop@node1 ~]$ hadoop fs -mkdir -p /workcount/input

6-moveFromLocal:从本地剪切粘贴到 hdfs

将本地demo.txt文件剪切粘贴到 hdfs 根目录下

$ hadoop fs -moveFromLocal demo.txt /

这里写图片描述

7-appendToFile:将一个文件中的内容追加到hdfs中的文件

将文件context.txt中的内容追加到hdfs中的demo.txt文件中

$ hadoop fs -appendToFile context.txt /demo.txt

这里写图片描述

8-chmod:修改权限

将demo.txt文件的拥有者、所属组及其它用户添加可执行权限

$ hadoop fs -chmod ugo+x /demo.txt

这里写图片描述

9-chown:修改拥有者及所属组

修改hello.txt 文件的拥有者及所属者均为root

$ hadoop fs -chown root:root /hello.txt

这里写图片描述

10-copyFromLocal:从本地文件系统中拷贝文件到hdfs中(等同于-put)

拷贝文件cp.txt到hdfs的根目录下

$ hadoop fs -copyFromLocal cp.txt /

这里写图片描述

11 -copyToLoal:从hdfs文件系统拷贝到本地(等同于-get)

从hdfs将hello.txt文件拷贝到本地

$ hadoop fs -copyToLocal /hello.txt /home/hadoop/hdfstest/

这里写图片描述

12 -cp:在hdfs文件系统中进行文件的拷贝

将cp.txt 文件拷贝到workcount/input目录下并重命名为b.txt

$ hadoop fs -cp /cp.txt /workcount/input/c.txt

这里写图片描述

13 -mv:在hdfs文件系统在进行文件的移动

将work/input目录下的c.txt文件移动到/user/hadoop目录下

$ hadoop fs -mv /workcount/input/c.txt .

这里写图片描述

14 -getmerge:从hdfs合并下载多个文件

将hdfs中的/workcount/input下的所有文件合并下载到本地的名为merg.txt文件中

hadoop fs -getmerge /workcount/input/*.* /home/hadoop/hdfstest/merg.txt

这里写图片描述

15 -rm:删除文件或文件夹(递归删除加-r参数)

$ hadoop fs -rm /demo.txt  # 删除demo.txt文件
$ hadoop fs -rm -r /workcount/output   # 递归删除

16 -df:统计文件系统的可用空间信息

$ hadoop fs -df -h /

这里写图片描述

17 -du:统计文件夹的大小信息

$ hadoop fs -du -s -h hdfs://node1:9000/*

这里写图片描述

18 -setrep:设置hdfs中文件的副本数量

$ hadoop fs -setrep 10 /cp.txt # 设置cp.txt的副本数量为10

设置前:

这里写图片描述

设置后:

这里写图片描述

注意:这里设置的副本数只是记录在namenode的元数据中,是否真的会有这么多副本,还得看datanode的数量

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值