Hadoop FS 文件系统命令

前言

Hadoop 文件系统命令可以用来直接和 Hadoop 的文件系统交互,支持包括 HDFS、本地文件系统、WebHDFS、S3 等文件系统。

命令的入口是:

bin/hadoop fs <args>

下面我们介绍下常用的文件命令。

命令

合并文件

appendToFile 命令可以用来合并文件,或者将一个或多个文件添加到目标文件的末尾,也支持直接从标准输入获取。

hadoop fs -appendToFile <localsrc> ... <dst>

例子:

# 添加文件内容到目标文件末尾
hadoop fs -appendToFile localfile /user/hadoop/hadoopfile
# 合并多个文件
hadoop fs -appendToFile localfile1 localfile2 /user/hadoop/hadoopfile
# 支持其他文件系统
hadoop fs -appendToFile localfile hdfs://nn.example.com/hadoop/hadoopfile
# 支持标准输入
hadoop fs -appendToFile - hdfs://nn.example.com/hadoop/hadoopfile

显示文件内容

cat 用来显示文件内容,和 Linux 的 cat 命令类似。

hadoop fs -cat [-ignoreCrc] URI [URI ...]

使用 -ignoreCrc 选项禁用文件校验。

例子:

hadoop fs -cat hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hadoop fs -cat file:///file3 /user/hadoop/file4

修改文件权限

chmod 可以修改文件权限,类似 Linux 的 chmod 命令。

hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]

使用 -R 选项递归修改。用户必须具有文件的权限(所有者或超级用户)。

修改文件所有者

chown 可以修改文件所有者,类似 Linux 的 chown 命令。

hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]

使用 -R 选项递归修改。用户必须是超级用户。

计数

count 可以用来计算指定路径下的目录、文件或者字节数量。

hadoop fs -count [-q] [-h] [-v] [-x] [-t [<storage type>]] [-u] [-e] [-s] <paths>

参数:

  • -q 参数显示已使用量和限额,-u 参数仅显示限额。-t 配合 -q 或 -u 使用,显示每个存储类型的已使用量和配额。
  • -h 将大小转换为易于阅读的格式。
  • -v 显示表头行。
  • -x 指定计算时排除快照。
  • -e 会增加一列 ERASURECODING_POLICY。
  • -s 会显示每个文件夹的快照数量。

例子:

hadoop fs -count hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hadoop fs -count -q hdfs://nn1.example.com/file1
hadoop fs -count -q -h hdfs://nn1.example.com/file1
hadoop fs -count -q -h -v hdfs://nn1.example.com/file1
hadoop fs -count -u hdfs://nn1.example.com/file1
hadoop fs -count -u -h hdfs://nn1.example.com/file1
hadoop fs -count -u -h -v hdfs://nn1.example.com/file1
hadoop fs -count -e hdfs://nn1.example.com/file1
hadoop fs -count -s hdfs://nn1.example.com/file1

复制文件

cp 命令可以复制文件。

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

参数:

  • -f 强制覆盖。
  • -d 不创建临时文件。
  • -p 保留文件的属性(如时间、所有权、权限等)。
  • -t <线程数量> 指定线程的数量,默认 1。
  • -q <线程池队列数量> 指定线程池中的队列数量,默认 1024,当线程数量大于 1 时有效。

例子:

hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2
hadoop fs -cp -f -d /user/hadoop/file1 /user/hadoop/file2
hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
hadoop fs -cp -t 5 /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
hadoop fs -cp -t 10 -q 2048 /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir

查看空闲空间

df 命令查看空闲的空间。

hadoop fs -df [-h] URI [URI ...]

-h 选项将大小格式化为易于理解的格式。

例子:

hadoop dfs -df /user/hadoop/dir1

查看空间占用

du 查看目录的空间占用或文件的大小。

hadoop fs -du [-s] [-h] [-v] [-x] URI [URI ...]

参数:

  • -s 显示目录下文件大小的总和。
  • -h 将大小格式化为易于理解的格式。
  • -v 显示表头行。
  • -x 计算时排除快照。

例子:

hadoop fs -du /user/hadoop/dir1 /user/hadoop/file1 hdfs://nn.example.com/user/hadoop/dir1

查找文件

find 命令可根据表达式查找指定的文件,并应用操作。如果不指定路径,则默认从当前目录查找。如果不指定操作,则默认打印。

支持的表达式有:

-name pattern:匹配文件名模式
-iname pattern:匹配文件名模式,不区分大小写
-print:打印
-print0:打印,会添加 ASCII NULL 字符

支持逻辑运算符,如 expression -a expressionexpression -and expression

例子:

hadoop fs -find / -name test -print

下载到本地文件系统

get 可以从其他文件系统下载到本地文件系统。

hadoop fs -get [-ignoreCrc] [-crc] [-p] [-f] [-t <thread count>] [-q <thread pool queue size>] <src> ... <localdst>

参数:

  • -p 保留文件的属性(如时间、所有权、权限等)。
  • -f 强制覆盖。
  • -ignoreCrc 跳过文件校验。
  • -crc 输出文件校验码。
  • -t <线程数量> 指定线程的数量,默认 1。
  • -q <线程池队列数量> 指定线程池中的队列数量,默认 1024,当线程数量大于 1 时有效。

例子:

hadoop fs -get /user/hadoop/file localfile
hadoop fs -get hdfs://nn.example.com/user/hadoop/file localfile
hadoop fs -get -t 10 hdfs://nn.example.com/user/hadoop/dir1 localdir
hadoop fs -get -t 10 -q 2048 hdfs://nn.example.com/user/hadoop/dir* localdir

查看文件列表

ls 可以查看文件夹中文件的信息。默认按文件名排序。

hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args>

参数:

  • -C 只显示文件或文件夹的路径。
  • -d 将文件夹像普通文件一样展示。
  • -h 将大小格式化为易于理解的格式。
  • -q 将不能打印的字符显示为 ?。
  • -R 递归展示文件夹。
  • -t 按修改时间排序。
  • -S 按大小排序。
  • -r 倒转排序顺序。
  • -u 在显示和排序时 使用访问时间替换修改时间。
  • -e 显示文件和文件夹的 ERASURECODING_POLICY。

例子:

hadoop fs -ls /user/hadoop/file1
hadoop fs -ls -e /ecdir

创建文件夹

mkdir 用来创建文件夹。

hadoop fs -mkdir [-p] <paths>

使用 -p 参数来创建父文件夹(如果不存在)。

例子:

hadoop fs -mkdir /user/hadoop/dir1 /user/hadoop/dir2
hadoop fs -mkdir hdfs://nn1.example.com/user/hadoop/dir hdfs://nn2.example.com/user/hadoop/dir

移动文件或文件夹

mv 用来移动文件或文件夹,或者重命名,不支持跨文件系统移动。

hadoop fs -mv URI [URI ...] <dest>

例子:

hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2
hadoop fs -mv hdfs://nn.example.com/file1 hdfs://nn.example.com/file2 hdfs://nn.example.com/file3 hdfs://nn.example.com/dir1

本地文件系统上传

put 可以将本地文件系统中的文件上传到目标文件系统中。也支持从标准输入读取。

hadoop fs -put [-f] [-p] [-l] [-d] [-t <thread count>] [-q <thread pool queue size>] [ - | <localsrc> ...] <dst>

参数:

  • -p 保留文件的属性(如时间、所有权、权限等)。
  • -f 强制覆盖。
  • -l 允许数据节点延迟持久化文件,慎用。
  • -d 不创建临时文件。
  • -t <线程数量> 指定线程的数量,默认 1。
  • -q <线程池队列数量> 指定线程池中的队列数量,默认 1024,当线程数量大于 1 时有效。

例子:

hadoop fs -put localfile /user/hadoop/hadoopfile
hadoop fs -put -f localfile1 localfile2 /user/hadoop/hadoopdir
hadoop fs -put -d localfile hdfs://nn.example.com/hadoop/hadoopfile
hadoop fs -put - hdfs://nn.example.com/hadoop/hadoopfile Reads the input from stdin.
hadoop fs -put -t 5 localdir hdfs://nn.example.com/hadoop/hadoopdir
hadoop fs -put -t 10 -q 2048 localdir1 localdir2 hdfs://nn.example.com/hadoop/hadoopdir

删除文件

rm 可以删除文件。如果启用了回收站(默认不启用),则会将文件移动到回收站。

hadoop fs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...]

参数:

  • -f 强制删除。
  • -R/-r 递归删除目录及目录下的所有文件。
  • -skipTrash 不放入回收站。
  • -safely 可以避免误操作,当要删除的文件夹中的文件数量大于配置项 hadoop.shell.delete.limit.num.files(默认 100)时,会增加确认提示。

例子:

hadoop fs -rm hdfs://nn.example.com/file /user/hadoop/emptydir

删除文件夹

rmdir 可以删除文件夹。

hadoop fs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]

--ignore-fail-on-non-empty 选项指定使用通配符时,当文件夹中有文件时不报错。

例子:

hadoop fs -rmdir /user/hadoop/emptydir

显示文件统计信息

stat 可以按指定格式输出文件或文件夹的统计信息。

hadoop fs -stat [format] <path> ...

支持如下格式:

  • %a:权限
  • %A:文件符号
  • %b:文件大小
  • %F:类型
  • %g:所有者组
  • %n:名称
  • %o:块大小
  • %r:副本
  • %u:所有者
  • %x:访问时间,UTC 格式
  • %X:访问时间,毫秒时间戳
  • %y:修改时间,UTC 格式
  • %Y:修改时间,毫秒时间戳

例子:

hadoop fs -stat "type:%F perm:%a %u:%g size:%b mtime:%y atime:%x name:%n" /file

修改文件时间

touch 可以修改文件的访问时间和修改时间,当文件不存在时,则创建一个空文件。

hadoop fs -touch [-a] [-m] [-t TIMESTAMP] [-c] URI [URI ...]

参数:

  • -a 仅更新访问时间
  • -m 仅更新修改时间
  • -t 指定特定的时间,默认是当前时间
  • -c 选项指定当不存在时不创建文件

例子:

hadoop fs -touch pathname
hadoop fs -touch -m -t 20180809:230000 pathname
hadoop fs -touch -t 20180809:230000 pathname
hadoop fs -touch -a pathname

支持其他文件系统

Hadoop 也支持对象存储协议等其他文件系统,如 AWS S3,Azure ABFS 等,使用对应的协议。

# 创建文件夹
hadoop fs -mkdir s3a://bucket/datasets/

# 从本地上传文件
hadoop fs -put /datasets/example.orc s3a://bucket/datasets/

# 更新文件时间
hadoop fs -touch wasb://yourcontainer@youraccount.blob.core.windows.net/touched

# 下载文件
hadoop fs -get wasb://yourcontainer@youraccount.blob.core.windows.net/hello.txt /examples

注意:使用 S3 等远程文件系统时,如果大量文件复制、移动或者查找的话会非常慢,对应的命令需谨慎。

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值