前言
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 等远程文件系统时,如果大量文件复制、移动或者查找的话会非常慢,对应的命令需谨慎。
版权归原作者 火眼9988 所有, 如有侵权,请联系我们删除。