0


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-t5 /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
hadoop fs -cp-t10-q2048 /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 expression

expression -and expression

例子:

hadoop fs -find / -nametest-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-t10 hdfs://nn.example.com/user/hadoop/dir1 localdir
hadoop fs -get-t10-q2048 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-t5 localdir hdfs://nn.example.com/hadoop/hadoopdir
hadoop fs -put-t10-q2048 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-t20180809:230000 pathname
hadoop fs -touch-t20180809: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://[email protected]/touched

# 下载文件
hadoop fs -get wasb://[email protected]/hello.txt /examples

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

标签: hadoop 大数据 hdfs

本文转载自: https://blog.csdn.net/wwtg9988/article/details/140999014
版权归原作者 火眼9988 所有, 如有侵权,请联系我们删除。

“Hadoop FS 文件系统命令”的评论:

还没有评论