@[TOC]

1、背景

此处咱们通过命令行,简略的学习一下 hdfs file system shell 的一些操作。

2、hdfs file system shell命令有哪些

咱们能够通过如下网址https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html#appendToFile来看看反对的命令操作。 其中大部分命令都和linux的命令用法相似。

3、确定shell操作的是哪个文件系统

# 操作本地文件系统[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls file:///Found 19 itemsdr-xr-xr-x   - root root      24576 2023-02-18 14:47 file:///bindr-xr-xr-x   - root root       4096 2022-06-13 10:41 file:///bootdrwxr-xr-x   - root root       3140 2023-02-28 20:17 file:///dev......# 操作hdfs 文件系统[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls hdfs://hadoop01:8020/Found 1 itemsdrwxrwx---   - hadoopdeploy supergroup          0 2023-02-19 17:20 hdfs://hadoop01:8020/tmp# 操作hdfs 文件系统 fs.defaultFS[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls /Found 1 itemsdrwxrwx---   - hadoopdeploy supergroup          0 2023-02-19 17:20 /tmp[hadoopdeploy@hadoop01 ~]$

4、本地筹备如下文件

文件名内容
1.txtaaa
2.txtbbb
3.txtccc

5、hdfs file system shell

5.1 mkdir创立目录

语法: Usage: hadoop fs -mkdir [-p] <paths>
-p示意,如果父目录不存在,则创立父目录。

[hadoopdeploy@hadoop01 sbin]$ hadoop fs -mkdir -p /bigdata/hadoop[hadoopdeploy@hadoop01 sbin]$

5.2 put上传文件

语法: Usage: hadoop fs -put [-f] [-p] [-d] [-t <thread count>] [-q <thread pool queue size>] [ - | <localsrc> ...] <dst>
-f 如果指标文件曾经存在,则进行笼罩操作
-p 保留拜访和批改工夫、所有权和权限
-d 跳过._COPYING_的临时文件
-t 要应用的线程数,默认为1。上传蕴含1个以上文件的目录时很有用
-q 要应用的线程池队列大小,默认为1024。只有线程数大于1时才失效

# 创立3个文件 1.txt 2.txt 3.txt[hadoopdeploy@hadoop01 ~]$ echo aaa > 1.txt[hadoopdeploy@hadoop01 ~]$ echo bbb > 2.txt[hadoopdeploy@hadoop01 ~]$ echo ccc > 3.txt# 上传本地的 1.txt 到hdfs的 /bigdata/hadoop 目录中[hadoopdeploy@hadoop01 ~]$ hadoop fs -put -p 1.txt /bigdata/hadoop# 因为 /bigdata/hadoop 中曾经存在了 1.txt 所有上传失败[hadoopdeploy@hadoop01 ~]$ hadoop fs -put -p 1.txt /bigdata/hadoopput: `/bigdata/hadoop/1.txt': File exists# 通过 -f 参数,如果指标文件曾经存在,则进行笼罩操作[hadoopdeploy@hadoop01 ~]$ hadoop fs -put -p -f 1.txt /bigdata/hadoop# 查看 /bigdata/hadoop 目录中的文件[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls /bigdata/hadoopFound 1 items-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/1.txt# 通过多线程和 通配符 上传多个文件[hadoopdeploy@hadoop01 ~]$ hadoop fs -put -p -f -t 3 *.txt /bigdata/hadoop# 查看 /bigdata/hadoop 目录中的文件[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls /bigdata/hadoopFound 3 items-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/1.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/2.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/3.txt

5.3 ls查看目录或文件

语法: Usage: hadoop fs -ls [-h] [-R] <paths>
-h 展现成人类可读的,比方文件的大小,展现成多少M等。
-R 递归展现。

# 列出/bigdata 目录和文件[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls /bigdata/Found 1 itemsdrwxr-xr-x   - hadoopdeploy supergroup          0 2023-02-28 12:37 /bigdata/hadoop# -R 递归展现[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls -R /bigdata/drwxr-xr-x   - hadoopdeploy supergroup          0 2023-02-28 12:37 /bigdata/hadoop-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/1.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/2.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/3.txt# -h 展现成人类可读的,比方多少k,多少M等[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls -R -h /bigdata/drwxr-xr-x   - hadoopdeploy supergroup          0 2023-02-28 12:37 /bigdata/hadoop-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/1.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/2.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/3.txt

5.4 cat 查看文件内容

语法: Usage: hadoop fs -cat [-ignoreCrc] URI [URI ...]
-ignoreCrc 禁用checkshum验证
留神: 如果文件比拟大,须要谨慎读取,因为这是查看文件的全部内容

# 查看 1.txt 和 2.txt 的文件内容[hadoopdeploy@hadoop01 ~]$ hadoop fs -cat -ignoreCrc /bigdata/hadoop/1.txt /bigdata/hadoop/2.txtaaabbb[hadoopdeploy@hadoop01 ~]$

5.5 head 查看文件前1000字节内容

语法: Usage: hadoop fs -head URI
Displays first kilobyte of the file to stdout(显示文件的前1000字节)

# 查看1.txt的前1000字节[hadoopdeploy@hadoop01 ~]$ hadoop fs -head /bigdata/hadoop/1.txtaaa[hadoopdeploy@hadoop01 ~]$

5.6 tail 查看文件后1000字节内容

语法: Usage:hadoop fs -tail [-f] URI
Displays last kilobyte of the file to stdout.(显示文件的后1000字节)
-f:示意将随着文件的增长输入附加数据,就像在Unix中一样。

# 查看1.txt的后1000字节[hadoopdeploy@hadoop01 ~]$ hadoop fs -tail /bigdata/hadoop/1.txtaaa[hadoopdeploy@hadoop01 ~]$

5.7 appendToFile 追加数据到hdfs文件中

语法: Usage: hadoop fs -appendToFile <localsrc> ... <dst>
将单个src或多个src从本地文件系统附加到指标文件系统。还能够从规范输出(localsrc是-)读取输出并附加到指标文件系统。

# 查看1.txt文件的内容[hadoopdeploy@hadoop01 ~]$ hadoop fs -cat /bigdata/hadoop/1.txtaaa# 查看2.txt文件的内容[hadoopdeploy@hadoop01 ~]$ hadoop fs -cat /bigdata/hadoop/2.txtbbb# 将1.txt文件的内容追加到2.txt文件中[hadoopdeploy@hadoop01 ~]$ hadoop fs -appendToFile 1.txt  /bigdata/hadoop/2.txt# 再次查看2.txt文件的内容[hadoopdeploy@hadoop01 ~]$ hadoop fs -cat /bigdata/hadoop/2.txtbbbaaa[hadoopdeploy@hadoop01 ~]$

5.8 get下载文件

语法: Usage: hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] [-t <thread count>] [-q <thread pool queue size>] <src> ... <localdst>

将文件复制到本地文件系统。能够应用-gnrecrc选项复制未能通过CRC查看的文件。能够应用-crc选项复制文件和CRC。

-f 如果指标文件曾经存在,则进行笼罩操作
-p 保留拜访和批改工夫、所有权和权限
-t 要应用的线程数,默认为1。下载蕴含多个文件的目录时很有用
-q 要应用的线程池队列大小,默认为1024。只有线程数大于1时才失效

# 下载hdfs文件系统的1.txt 到本地当前目录下的1.txt.download文件 [hadoopdeploy@hadoop01 ~]$ hadoop fs -get /bigdata/hadoop/1.txt ./1.txt.download# 查看 1.txt.download是否存在[hadoopdeploy@hadoop01 ~]$ ls1.txt  1.txt.download  2.txt  3.txt# 再次下载,因为本地曾经存在1.txt.download文件,所有报错[hadoopdeploy@hadoop01 ~]$ hadoop fs -get /bigdata/hadoop/1.txt ./1.txt.downloadget: `./1.txt.download': File exists# 通过 -f 笼罩曾经存在的文件[hadoopdeploy@hadoop01 ~]$ hadoop fs -get -f /bigdata/hadoop/1.txt ./1.txt.download# 多线程下载[hadoopdeploy@hadoop01 ~]$ hadoop fs -get -f -t 3 /bigdata/hadoop/*.txt ./123.txt.downloadget: `./123.txt.download': No such file or directory# 多线程下载[hadoopdeploy@hadoop01 ~]$ hadoop fs -get -f -t 3 /bigdata/hadoop/*.txt .[hadoopdeploy@hadoop01 ~]$

5.9 getmerge合并下载

语法: Usage: hadoop fs -getmerge [-nl] [-skip-empty-file] <src> <localdst>

将多个src文件的内容合并到localdst文件中

-nl 示意在每个文件开端减少换行符
-skip-empty-file 跳过空文件

# hdfs上1.txt文件的内容[hadoopdeploy@hadoop01 ~]$ hadoop fs -cat /bigdata/hadoop/1.txtaaa# hdfs上3.txt文件的内容[hadoopdeploy@hadoop01 ~]$ hadoop fs -cat /bigdata/hadoop/3.txtccc# 将hdfs上1.txt 3.txt下载到本地 merge.txt 文件中 -nl减少换行符 -skip-empty-file跳过空文件[hadoopdeploy@hadoop01 ~]$ hadoop fs -getmerge -nl -skip-empty-file /bigdata/hadoop/1.txt /bigdata/hadoop/3.txt ./merge.txt# 查看merge.txt文件[hadoopdeploy@hadoop01 ~]$ cat merge.txtaaaccc[hadoopdeploy@hadoop01 ~]$

5.10 cp复制文件

语法: Usage: hadoop fs -cp [-f] [-p | -p[topax]] [-t <thread count>] [-q <thread pool queue size>] URI [URI ...] <dest>

-f 如果指标文件存在则进行笼罩。
-t 要应用的线程数,默认为1。复制蕴含多个文件的目录时很有用
-q 要应用的线程池队列大小,默认为1024。只有线程数大于1时才失效

# 查看 /bigdata目录下的文件[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls /bigdataFound 1 itemsdrwxr-xr-x   - hadoopdeploy supergroup          0 2023-02-28 12:55 /bigdata/hadoop# 查看/bigdata/hadoop目录下的文件[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls /bigdata/hadoopFound 3 items-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/1.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          8 2023-02-28 12:55 /bigdata/hadoop/2.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/3.txt# 将 /bigdata/hadoop 目录下所有的文件 复制到 /bigdata 目录下[hadoopdeploy@hadoop01 ~]$ hadoop fs -cp /bigdata/hadoop/* /bigdata# 查看 /bigdata/ 目录下的文件[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls /bigdataFound 4 items-rw-r--r--   2 hadoopdeploy supergroup          4 2023-02-28 13:17 /bigdata/1.txt-rw-r--r--   2 hadoopdeploy supergroup          8 2023-02-28 13:17 /bigdata/2.txt-rw-r--r--   2 hadoopdeploy supergroup          4 2023-02-28 13:17 /bigdata/3.txtdrwxr-xr-x   - hadoopdeploy supergroup          0 2023-02-28 12:55 /bigdata/hadoop[hadoopdeploy@hadoop01 ~]$

5.11 mv挪动文件

语法: Usage: hadoop fs -mv URI [URI ...] <dest>
将文件从源挪动到指标。此命令还容许多个源,在这种状况下,指标须要是一个目录。不容许跨文件系统挪动文件。

# 列出 /bigdata/hadoop 目录下的文件[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls /bigdata/hadoopFound 3 items-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/1.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          8 2023-02-28 12:55 /bigdata/hadoop/2.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/3.txt# 将 1.txt 重命名为 1-new-name.txt[hadoopdeploy@hadoop01 ~]$ hadoop fs -mv /bigdata/hadoop/1.txt /bigdata/hadoop/1-new-name.txt# 列出 /bigdata/hadoop 目录下的文件,能够看到1.txt曾经改名了[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls /bigdata/hadoopFound 3 items-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/1-new-name.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          8 2023-02-28 12:55 /bigdata/hadoop/2.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          4 2023-02-28 12:31 /bigdata/hadoop/3.txt[hadoopdeploy@hadoop01 ~]$

5.12 setrep 批改指定文件的正本数

语法: Usage: hadoop fs -setrep [-R] [-w] <numReplicas> <path>
更改文件的正本数。如果path是一个目录,则该命令递归更改以path为根的目录树下所有文件的正本数。执行此命令时,EC文件将被疏忽。
-R -R标记是为了向后兼容。它没有影响。
-w -w标记申请命令期待复制实现。这可能须要很长时间。

# 批改1-new-name.txt文件为3个正本[hadoopdeploy@hadoop01 ~]$ hadoop fs -setrep -w 3 /bigdata/hadoop/1-new-name.txtReplication 3 set: /bigdata/hadoop/1-new-name.txtWaiting for /bigdata/hadoop/1-new-name.txt .... done[hadoopdeploy@hadoop01 ~]$

5.13 df显示可用空间

语法: Usage: hadoop fs -df [-h] URI [URI ...]

[hadoopdeploy@hadoop01 ~]$ hadoop fs -df /bigdata/hadoopFilesystem                   Size     Used    Available  Use%hdfs://hadoop01:8020  27697086464  1228800  17716019200    0%# -h 显示人类可读的[hadoopdeploy@hadoop01 ~]$ hadoop fs -df -h /bigdata/hadoopFilesystem              Size   Used  Available  Use%hdfs://hadoop01:8020  25.8 G  1.2 M     16.5 G    0%

5.14 du统计文件夹或文件的大小

语法: Usage: hadoop fs -df [-h] URI [URI ...]

[hadoopdeploy@hadoop01 ~]$ hadoop fs -du /bigdata/hadoop4  12  /bigdata/hadoop/1-new-name.txt8  16  /bigdata/hadoop/2.txt4  8   /bigdata/hadoop/3.txt[hadoopdeploy@hadoop01 ~]$ hadoop fs -du -s /bigdata/hadoop16  36  /bigdata/hadoop[hadoopdeploy@hadoop01 ~]$ hadoop fs -du -s -h /bigdata/hadoop16  36  /bigdata/hadoop# 16 示意/bigdata/hadoop目录下所有文件的总大小# 36 示意/bigdata/hadoop目录下所有文件占据所有正本的总大小[hadoopdeploy@hadoop01 ~]$ hadoop fs -du -s -h -v /bigdata/hadoopSIZE  DISK_SPACE_CONSUMED_WITH_ALL_REPLICAS  FULL_PATH_NAME16    36                                     /bigdata/hadoop[hadoopdeploy@hadoop01 ~]$

5.15 chgrp chmod chown扭转文件的所属权限

[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls /bigdata/hadoop/2.txt-rw-rw-r--   2 hadoopdeploy hadoopdeploy          8 2023-02-28 12:55 /bigdata/hadoop/2.txt# 给2.txt减少可执行的权限[hadoopdeploy@hadoop01 ~]$ hadoop fs -chmod +x /bigdata/hadoop/2.txt[hadoopdeploy@hadoop01 ~]$ hadoop fs -ls /bigdata/hadoop/2.txt-rwxrwxr-x   2 hadoopdeploy hadoopdeploy          8 2023-02-28 12:55 /bigdata/hadoop/2.txt[hadoopdeploy@hadoop01 ~]$

5.16 rm删除文件或目录

语法: Usage: hadoop fs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...]
如果启用了回收站,文件系统会将已删除的文件挪动到垃圾箱目录。
目前,默认状况下禁用垃圾桶性能。用户能够通过为参数fs. trash.interval(在core-site.xml中)设置大于零的值来启用回收站。

-f 如果文件不存在,将不会显示诊断音讯或批改退出状态以反映谬误。
-R 选项递归删除目录及其下的任何内容。
-r 选项等价于-R。
-skipTrash 选项将绕过回收站,如果启用,并立刻删除指定的文件。当须要从大目录中删除文件时,这很有用。
-safely 在删除文件总数大于 hadoop.shell.delete.limited.num.files的文件时(在core-site.xml中,默认值为100)之前,须要进行平安确认

# 删除2.txt,因为我本地启动了回收站,所以文件删除的文件进入了回收站[hadoopdeploy@hadoop01 ~]$ hadoop fs -rm /bigdata/hadoop/2.txt2023-02-28 22:04:51,302 INFO fs.TrashPolicyDefault: Moved: 'hdfs://hadoop01:8020/bigdata/hadoop/2.txt' to trash at: hdfs://hadoop01:8020/user/hadoopdeploy/.Trash/Current/bigdata/hadoop/2.txt[hadoopdeploy@hadoop01 ~]$

6、界面操作

可能有些人会说,这么多的命令,怎么记的住,如果咱们能够操作hdfs的界面,则能够在界面上进行操作。

7、参考链接

1、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html#appendToFile