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
    评论
### 回答1: HDFS ShellHadoop分布式文件系统中的命令行工具,用于管理HDFS中的文件和目录。以下是HDFS Shell常用的一些操作: 1. 列出目录中的文件和子目录:`hdfs dfs -ls <目录路径>` 2. 创建目录:`hdfs dfs -mkdir <目录路径>` 3. 删除目录:`hdfs dfs -rm -r <目录路径>` 4. 上传本地文件到HDFS:`hdfs dfs -put <本地文件路径> <HDFS目录路径>` 5. 下载HDFS文件到本地:`hdfs dfs -get <HDFS文件路径> <本地目录路径>` 6. 合并HDFS文件到本地:`hdfs dfs -getmerge <HDFS目录路径> <本地文件路径>` 7. 复制文件:`hdfs dfs -cp <源文件路径> <目标文件路径>` 8. 移动文件:`hdfs dfs -mv <源文件路径> <目标文件路径>` 9. 查看文件内容:`hdfs dfs -cat <文件路径>` 10. 修改文件权限:`hdfs dfs -chmod <权限> <文件路径>` 以上是HDFS Shell的一些常用操作,可以帮助用户管理Hadoop分布式文件系统中的文件和目录。 ### 回答2: Hadoop分布式文件系统Hadoop Distributed File System,简称HDFS)是Apache Hadoop的核心组件之一,用于存储和处理大规模数据集。HDFS ShellHadoop提供的基于命令行的操作工具,用于执行文件系统的管理操作HDFS Shell主要提供以下操作: 1. 文件和目录操作: - ls:列出指定目录下的内容。 - mkdir:创建一个新目录。 - rm:删除指定文件或目录。 - mv:将文件或目录移动到新位置。 - chmod:修改文件或目录的权限设置。 2. 文件上传和下载: - put:上传本地文件到HDFS。 - get:将HDFS上的文件下载到本地。 3. HDFS中的文件操作: - cat:打印文件内容。 - tail:打印文件的结尾部分。 - head:打印文件的开头部分。 - du:计算文件或目录的大小。 - count:统计指定目录下文件以及目录的个数。 - checksum:计算文件内容的检验和。 4. 其他操作: - help:列出所有可用命令。 - usage:显示指定命令的使用方法信息。 - exit:退出HDFS Shell。 使用HDFS Shell进行操作时,可以根据需要选择合适的命令来执行对应的操作。例如,使用ls命令可以列出指定目录下的文件和子目录,使用put命令可以上传本地文件到HDFS,使用cat命令可以打印指定文件的内容等。 HDFS Shell操作也可以通过Shell脚本来批量执行,可以更加方便地进行文件系统管理。总的来说,HDFS Shell是一种方便、高效的文件系统操作工具,对于Hadoop用户来说是必不可少的。 ### 回答3: HDFSHadoop 分布式文件系统)是一个由 Apache Hadoop 提供的分布式文件存储系统。HDFS ShellHDFS 文件系统的命令行接口,可以通过命令行终端进行 HDFS 文件系统的操作,实现文件的上传、下载、创建等。 HDFS Shell 使用方式如下: 1. 进入 Hadoop 环境,输入命令`hdfs dfs`或`hadoop fs`后,就可以使用 HDFS Shell。 2. 命令格式: ``` hadoop fs [通用选项] [-D <属性>=<值>] <命令> [命令选项] ``` 表示 HDFS Shell 包含的通用选项、属性选项,以及命令和命令选项。 其中,通用选项包括 `-conf`、`-D`、`-fs`、`-jt` 等,这些选项在 Hadoop 的其他模块中也可以使用。 命令包括 `cat`、`cp`、`count`、`get`、`ls`、`mkdir`、`mv`、`put`、`rm`、`rmdir` 等。 命令选项包括 `-skipTrash`、`-skipChecksum`、`-overwrite`、`-recursive` 等。 3. HDFS Shell 常用命令: `ls`:显示 HDFS 目录下的文件和目录。 `mkdir`:在 HDFS 中创建一个新的目录。 `put`:将本地文件或目录上传到 HDFS 文件系统。 `get`:将 HDFS 文件系统中的文件或目录下载到本地。 `rm`:删除 HDFS 文件系统中的文件或目录。 `mv`:将 HDFS 文件系统中的文件或目录移动到另一个位置。 4. HDFS Shell 实例: `hdfs dfs -ls /`:列出 HDFS 根目录下的文件和目录。 `hdfs dfs -mkdir /test`:在 HDFS 中创建一个名为 test 的目录。 `hdfs dfs -put localfile /test`:将本地文件 localfile 上传到 HDFS 的目录 test 中。 `hdfs dfs -get /test/hadoopfile localfile`:将 HDFS 中 test 目录下的文件 hadoopfile 下载到本地的 localfile 中。 `hdfs dfs -rm /test/hadoopfile`:删除 HDFS 中 test 目录下的文件 hadoopfile。 `hdfs dfs -mv /test/hadoopfile /test/newfile`:将 HDFS 中 test 目录下的文件 hadoopfile 移动到 test 目录下的 newfile 中。 综上所述,HDFS Shell 对于 Hadoop 分布式文件系统的管理和维护具有很重要的意义,能够方便地进行文件的上传、下载、删除、创建等操作。此外,HDFS Shell 还支持批量处理和脚本编程,可以方便地实现批量操作,提高操作效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值