Apache Hadoop 3.3.1 – Overview
英文太渣,看得脑瓜疼,有时间就看了一遍,整理了一下下。
appendToFile
用法:hadoop fs -appendToFile <localsrc> ... <dst>
将单个 src 或多个 src 从本地文件系统附加到目标文件系统。还从 stdin 读取输入并附加到目标文件系统。
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从标准输入读取输入。
例子:
hadoop@node1:~$ cat 2.txt
你好,我好,大家好!
hadoop@node1:~$ hdfs dfs -cat /test1.txt
你好啊,hello hdfs
hadoop@node1:~$ hdfs dfs -appendToFile 2.txt /test1.txt
hadoop@node1:~$ hdfs dfs -cat /test1.txt
你好啊,hello hdfs
你好,我好,大家好!
cat
用法:hadoop fs -cat [-ignoreCrc] URI [URI ...]
将源路径复制到标准输出。
选项:该-ignoreCrc选项禁用checkshum验证。
例子:
hadoop fs -cat hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hadoop fs -cat file:///file3 /user/hadoop/file4
checksum
用法:hadoop fs -checksum [-v] URI
返回文件的校验和信息。
选项:该-v选项显示的块大小的文件。
例子:
hadoop fs -checksum hdfs://nn1.example.com/file1
hadoop fs -checksum file:///etc/hosts
chgrp
用法:hadoop fs -chgrp [-R] 组 URI [URI ...]
更改文件的组关联。用户必须是文件的所有者,否则是超级用户。
选项:-R 选项将通过目录结构递归地进行更改。
hdfs dfs -chgrp supergroup /test/hosts
hdfs dfs -chgrp -R admingroup /test/hosts
chmod
用法:hadoop fs -chmod [-R] <MODE[,MODE]... | 八进制模式> URI [URI ...]
更改文件的权限。使用 -R,通过目录结构递归进行更改。用户必须是文件的所有者,否则是超级用户。
选项:-R 选项将通过目录结构递归地进行更改。
hdfs dfs -chmod 700 /test/hosts
hdfs dfs -chmod -R 731 /test/hosts
chown
用法:hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI]
更改文件的所有者。用户必须是超级用户。
选项:-R 选项将通过目录结构递归地进行更改。
hdfs dfs -chown iris /test/hosts #只修改目录所属用户
hdfs dfs -chown :admin /test/hosts #只修改目录所属组
hdfs dfs -chown java:bigdata /test/hosts #修改所属组和所属用户
hdfs dfs -chown -R python:devops /test/hosts #递归更改
copyFromLocal
使用方法:hadoop fs -copyFromLocal <localsrc> URI 除了限定源路径是一个本地文件外,和put命令相似。
put命令
使用方法:hadoop fs -put <localsrc> ... <dst>
从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取输入写入目标文件系统。
hadoop fs -put localfile /user/hadoop/hadoopfile
hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir
hadoop fs -put localfile hdfs://host:port/hadoop/hadoopfile
hadoop fs -put - hdfs://host:port/hadoop/hadoopfile
copyToLocal
使用方法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst> 除了限定目标路径是一个本地文件外,和get命令类似。
get
复制文件到本地文件系统。可用-ignorecrc选项复制CRC校验失败的文件。使用-crc选项复制文件以及CRC信息。
示例:
hadoop fs -get /user/hadoop/file localfile
hadoop fs -get hdfs://host:port/user/hadoop/file localfile
count
用法:hadoop fs -count [-q] [-h] [-v] [-x] [-t [<storage type>]] [-u] [-e] [-s] <paths>
计算路径下与指定文件模式匹配的目录、文件和字节数。获取配额和使用情况。带有 -count 的输出列是:DIR_COUNT、FILE_COUNT、CONTENT_SIZE、PATHNAME
-u 和 -q 选项控制输出包含哪些列。-q 表示显示配额,-u 将输出限制为仅显示配额和使用情况。
-count -q 的输出列是:QUOTA、REMAINING_QUOTA、SPACE_QUOTA、REMAINING_SPACE_QUOTA、DIR_COUNT、FILE_COUNT、CONTENT_SIZE、PATHNAME
带有 -count -u 的输出列是:QUOTA、REMAINING_QUOTA、SPACE_QUOTA、REMAINING_SPACE_QUOTA、PATHNAME
-t 选项显示每种存储类型的配额和使用情况。如果未给出 -u 或 -q 选项,则忽略 -t 选项。可以在 -t 选项中使用的可能参数列表(除了参数“”之外不区分大小写):“”、“all”、“ram_disk”、“ssd”、“disk”或“archive”。
-h 选项以人类可读的格式显示大小。
-v 选项显示标题行。
-x 选项从结果计算中排除快照。如果没有 -x 选项(默认),结果总是从所有 INode 计算,包括给定路径下的所有快照。如果给出 -u 或 -q 选项,则忽略 -x 选项。
-e 选项显示每个文件的纠删码策略。
带有 -count -e 的输出列是:DIR_COUNT、FILE_COUNT、CONTENT_SIZE、ERASURECODING_POLICY、PATHNAME
ERASURECODING_POLICY 是文件的策略名称。如果在该文件上设置了擦除编码策略,它将返回该策略的名称。如果没有设置纠删码策略,它会返回“Replicated”,这意味着它使用复制存储策略。
-s 选项显示每个目录的快照计数。
[sunwg]$ hadoop fs -count /sunwg
2 1 108 hdfs://sunwg:9000/sunwg
第一个数值2表示/sunwg下的文件夹的个数,
第二个数值1表是当前文件夹下文件的个数,
第三个数值108表示该文件夹下文件所占的空间大小,这个大小是不计算副本的个数的
[sunwg]$ hadoop fs -count -q /sunwg
1024 1021 10240 10132 2 1 108 hdfs://sunwg:9000/sunwg
在count后面增加-q选项可以查看当前文件夹的限额使用情况,
第一个数值1024,表示总的文件包括文件夹的限额
第二个数值1021表示目前剩余的文件限额,即还可以创建这么多的文件或文件夹
第三个数值10240表示当前文件夹空间的限额
第四个数值10132表示当前文件夹可用空间的大小,这个限额是会计算多个副本的
cp
用法:hadoop fs -cp [-f] [-p | -p [topax]] URI [URI ...] <dest>
拷贝,HDFS文件系统中进行的拷贝操作。将文件从源复制到目标。此命令也允许多个源,此时目标路径必须是一个目录
如果 (1) 源和目标文件系统支持它们(仅 HDFS),并且 (2) 所有源和目标路径名都在 /.reserved/raw 层次结构中,则保留“raw.*”命名空间扩展属性。确定是否保留 raw.* 命名空间 xattrs 与 -p(保留)标志无关。
选项:如果目标已经存在,-f 选项将覆盖目标。
-p 选项将保留文件属性 [topx](时间戳、所有权、权限、ACL、XAttr)。如果 -p 没有指定arg,则保留时间戳、所有权、权限。如果指定了 -pa,则保留权限也是因为 ACL 是权限的超集。是否保留原始名称空间扩展属性的确定与 -p 标志无关。
例子:
hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2
hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
df
用法:hadoop fs -df [-h] URI [URI ...]
显示可用空间。
选项:-h 选项将以“人类可读”的方式格式化文件大小(例如 64.0m 而不是 67108864)
例子:
hadoop dfs -df /user/hadoop/dir1
du
用法:hadoop fs -du [-s] [-h] [-v] [-x] URI [URI ...]
显示给定目录中包含的文件和目录的大小或文件的长度(如果它只是一个文件)。
选项:
-s 选项将导致显示文件长度的汇总摘要,而不是单个文件。如果没有 -s 选项,计算是通过从给定路径深入 1 级来完成的。
-h 选项将以“人类可读”的方式格式化文件大小(例如 64.0m 而不是 67108864)
-v 选项将列名显示为标题行。
-x 选项将从结果计算中排除快照。如果没有 -x 选项(默认),结果总是从所有 INode 计算,包括给定路径下的所有快照。
例子:
[root@nm-cdh-coordinate-02 fortress]# hdfs dfs -du -h /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/
0 0 /zhpt/dwd/ehome/t_ehome_profession_order_info_hour/year=2021/month=202109/day=20210923/hour=00/_SUCCESS
4.2 M 12.5 M /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/part-00000.snappy
4.3 M 12.9 M /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/part-00001.snappy
du 返回三列,格式如下:
大小 所有replica的大小 绝对路径
[root@nm-cdh-coordinate-02 fortress]# hdfs dfs -du -s -h /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/
8.5 M 25.4 M /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00
expunge
用法:hadoop fs -expunge [-immediate] [-fs <path>]
从垃圾目录中永久删除检查点中早于保留阈值的文件,并创建新的检查点。
创建检查点后,垃圾箱中最近删除的文件将移动到检查点下。检查点中早于fs.trash.interval 的文件将在下次调用-expunge命令时永久删除。
如果文件系统支持该功能,用户可以通过存储为fs.trash.checkpoint.interval(在core-site.xml中)的参数配置定期创建和删除检查点。这个值应该小于或等于fs.trash.interval。
如果传递-immediate选项,则立即删除当前用户垃圾箱中的所有文件,忽略fs.trash.interval设置。
如果传递-fs选项,则提供的文件系统将被清除,而不是默认文件系统并创建检查点。
例子:
hadoop fs -expunge --immediate -fs s3a://landsat-pds/
find
用法:hadoop fs -find <路径> ... <表达式> ...
例子:
[root@nm-cdh-coordinate-02 fortress]# hadoop fs -find /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/ -name *.snappy -print
/zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/part-00000.snappy
/zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/part-00001.snappy
getfacl
用法:hadoop fs -getfacl [-R] <路径>
显示文件和目录的访问控制列表 (ACL)。如果目录具有默认 ACL,则 getfacl 还会显示默认 ACL。
选项:-R:递归列出所有文件和目录的ACL。
path:要列出的文件或目录。
例子:
[root@nm-cdh-coordinate-02 fortress]# hadoop fs -getfacl /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/
# file: /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00
# owner: stat_user
# group: stat_group
user::rwx
group::r-x
other::r-x
getfattr
用法:hadoop fs -getfattr [-R] -n name | -d [-e en] <路径>
显示文件或目录的扩展属性名称和值(如果有)。
选项:
-R:递归列出所有文件和目录的属性。
-n name:转储命名的扩展属性值。
-d:转储与路径名关联的所有扩展属性值。
-e encoding : 在检索值后对其进行编码。有效的编码是“text”、“hex”和“base64”。编码为文本字符串的值用双引号 (") 括起来,编码为十六进制和 base64 的值分别以 0x 和 0 为前缀。
路径:文件或目录。
[root@nm-cdh-coordinate-02 fortress]# hadoop fs -getfattr -d /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/
# file: /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00
[root@nm-cdh-coordinate-02 fortress]#
[root@nm-cdh-coordinate-02 fortress]# hadoop fs -getfattr -d -R /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/
# file: /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00
# file: /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/_SUCCESS
# file: /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/part-00000.snappy
# file: /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/part-00001.snappy
getmerge
用法:hadoop fs -getmerge [-nl] <src> <localdst>
将源目录和目标文件作为输入,并将 src 中的文件连接到目标本地文件中。可以选择 -nl 设置以启用在每个文件末尾添加换行符 (LF)。-skip-empty-file 可用于在空文件的情况下避免不需要的换行符。
hadoop fs -getmerge -nl /src /opt/output.txt #将hdfs的src目录下所有文件part合并到本地output.txt进行查看
hadoop fs -getmerge -nl /src/file1.txt /src/file2.txt /output.txt
head
(我本地的hadoop -help找不到这个head这个命令:hadoop version看到的版本是Hadoop 3.0.0-cdh6.2.1)
用法:hadoop fs -head URI
将文件的第一个 KB 显示到标准输出。
例子:
hadoop fs -head 路径名
ls
用法:hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args>
选项:
-C:只显示文件和目录的路径。
-d:目录被列为普通文件。
-h:以人类可读的方式格式化文件大小(例如 64.0m 而不是 67108864)。
-q:打印?而不是不可打印的字符。
-R:递归列出遇到的子目录。
-t:按修改时间排序输出(最近的在前)。
-S:按文件大小对输出进行排序。
-r:颠倒排序顺序。
-u:使用访问时间而不是修改时间进行显示和排序。
-e:只显示文件和目录的纠删码策略。
默认情况下,目录中的文件按文件名排序。
例子:
hadoop fs -ls /user/hadoop/file1
hadoop fs -ls -e /ecdir
mkdir
用法:hadoop fs -mkdir [-p] <paths>
将路径 uri 作为参数并创建目录。
选项:-p 选项的行为很像 Unix mkdir -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
moveFromLocal
用法:hadoop fs -moveFromLocal <localsrc> <dst>
把文件从本地剪切到HDFS
moveToLocal
用法:hadoop fs -moveToLocal [-crc] <src> <dst>
#把hdfs文件移动到本地上
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
rm
用法:hadoop fs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...]
删除指定为 args 的文件。
如果启用了垃圾箱,文件系统会将删除的文件移动到垃圾箱目录(由FileSystem#getTrashRoot 给出)。
目前,垃圾箱功能默认是禁用的。用户可以通过为参数fs.trash.interval(在 core-site.xml 中)设置一个大于零的值来启用垃圾箱。
选项:
如果文件不存在,-f 选项将不会显示诊断消息或修改退出状态以反映错误。
-R 选项以递归方式删除目录及其下的任何内容。
-r 选项等效于 -R。
-skipTrash 选项将绕过垃圾箱(如果启用),并立即删除指定的文件。当需要从超配额目录中删除文件时,这会很有用。
-safely 选项在删除文件总数大于hadoop.shell.delete.limit.num.files 的目录之前需要安全确认(在 core-site.xml 中,默认值:100)。它可以与 -skipTrash 一起使用以防止意外删除大目录。在确认之前递归遍历大目录以计算要删除的文件数时预计会出现延迟。
例子:
hadoop fs -rm hdfs://nn.example.com/file /user/hadoop/emptydir
hadoop fs -rmr 递归版本的删除,已废弃,改为:hadoop fs -rm -r
rmdir
用法:hadoop fs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]
删除目录。
选项:--ignore-fail-on-non-empty:使用通配符时,如果目录仍然包含文件,则不要失败。
例子:
hadoop fs -rmdir /user/hadoop/emptydir
setfacl
用法:hadoop fs -setfacl [-R] [-b |-k -m |-x <acl_spec> <path>] |[--set <acl_spec> <path>]
设置文件和目录的访问控制列表 (ACL)。
选项:
-b:删除除基本 ACL 条目之外的所有条目。保留用户、组和其他条目以与权限位兼容。
-k:删除默认 ACL。
-R:递归地对所有文件和目录应用操作。
-m:修改ACL。将新条目添加到 ACL,并保留现有条目。
-x:删除指定的 ACL 条目。保留其他 ACL 条目。
--set:完全替换 ACL,丢弃所有现有条目。所述acl_spec必须包括用户,组条目和其他用于与权限位兼容性。如果 ACL 规范仅包含访问条目,则保留现有的默认条目。如果 ACL 规范仅包含默认条目,则保留现有访问条目。如果 ACL 规范同时包含访问和默认条目,则两者都将被替换。
acl_spec:逗号分隔的 ACL 条目列表。
path:要修改的文件或目录。
例子:
hadoop fs -setfacl -m 用户:hadoop:rw- /file
hadoop fs -setfacl -x 用户:hadoop /file
hadoop fs -setfacl -b /file
hadoop fs -setfacl -k /dir
hadoop fs -setfacl --set user::rw-,user:hadoop:rw-,group::r--,other::r-- /file
hadoop fs -setfacl -R -m 用户:hadoop:rx /dir
hadoop fs -setfacl -m default:user:hadoop:rx /dir
setfattr
用法:hadoop fs -setfattr -n name [-v value] | -x 名称 <路径>
设置文件或目录的扩展属性名称和值。
选项:-n name:扩展属性名称。
-v 值:扩展属性值。该值有三种不同的编码方法。如果参数用双引号括起来,则值是引号内的字符串。如果参数以 0x 或 0X 为前缀,则将其视为十六进制数。如果参数以 0s 或 0S 开头,则将其视为 base64 编码。
-x 名称:删除扩展属性。
路径:文件或目录。
例子:
hadoop fs -setfattr -n user.myAttr -v myValue /file
hadoop fs -setfattr -n user.noValue /file
hadoop fs -setfattr -x user.myAttr /file
setrep
用法:hadoop fs -setrep [-R] [-w] <numReplicas> <path>
更改文件的复制因子。如果path是一个目录,则该命令递归地更改以path 为根的目录树下所有文件的复制因子
选项:-w 标志请求命令等待复制完成。这可能需要很长时间。
接受 -R 标志是为了向后兼容。它没有效果。
例子:
[root@node1 ~]#hadoop fs -ls /test #查看文本副本数,第二列的3表示3副本
-rw-r--r-- 3 root hbase 100797385 2018-01-22 22:26 /test/a.tar
[root@node1 ~]#hadoop fs -setrep -w 2 /test #修改/test目录的副本数。修改成功后,再看副本数就变成2
stat
用法:hadoop fs -stat [format] <path> ...
以指定格式打印 <path> 处的文件/目录的统计信息。格式接受八进制 (%a) 和符号 (%A) 的权限、以字节为单位的文件大小 (%b)、类型 (%F)、所有者的组名 (%g)、名称 (%n)、块大小 (%o) )、复制 (%r)、所有者的用户名 (%u)、访问日期 (%x, %X) 和修改日期 (%y, %Y)。%x 和 %y 将 UTC 日期显示为“yyyy-MM-dd HH:mm:ss”,%X 和 %Y 显示自 UTC 1970 年 1 月 1 日以来的毫秒数。如果未指定格式,则默认使用 %y。
例子:
[root@nm-cdh-coordinate-02 fortress]# hadoop fs -stat "type:%F perm:%a %u:%g size:%b mtime:%y atime:%x name:%n" /zhpt/info_hour/year=2021/month=202109/day=20210923/hour=00/
type:directory perm:755 stat_user:stat_group size:0 mtime:2021-09-22 17:56:04 atime:1970-01-01 00:00:00 name:hour=00
tail
将文件的最后千字节显示到标准输出。
选项:
-f 选项将随着文件的增长输出附加数据,就像在 Unix 中一样。
例子:
hadoop fs -tail 路径名
test
用法:hadoop fs -test -[defswrz] URI
选项:
-d:如果路径是目录,则返回0。
-e:如果路径存在,返回0。
-f:如果路径是文件,则返回0。
-s:如果路径不为空,则返回0。
-w:如果路径存在并且被授予写权限,则返回0。
-r:如果路径存在并且被授予读取权限,则返回0。
-z:如果文件长度为零,则返回 0。
例子:
hadoop fs -test -e 文件名
text
用法:hadoop fs -text <src> 跟cat类似
获取源文件并以文本格式输出文件。允许的格式为 zip 和 TextRecordInputStream。
touch
用法:hadoop fs -touch [-a] [-m] [-t TIMESTAMP] [-c] URI [URI ...]
将 URI 指定的文件的访问和修改时间更新为当前时间。如果该文件不存在,则在 URI 处创建一个零长度文件,并将当前时间作为该 URI 的时间戳。
使用 -a 选项仅更改访问时间
使用 -m 选项仅更改修改时间
使用 -t 选项指定时间戳(格式为 yyyyMMdd:HHmmss)而不是当前时间
如果文件不存在,请使用 -c 选项不创建文件
时间戳格式如下 * yyyy 四位数字年份(如 2018) * MM 两位数字月份(如 08 代表八月) * dd 两位数字日期(如 01 代表月份的第一天)* HH 使用 24 小时表示法的一天中的两位数小时(例如 23 代表晚上 11 点,11 代表上午 11 点)* mm 小时的两位数分钟 * ss 分钟的两位数秒,例如 20180809:230000 代表 2018 年 8 月 9 日,晚上11点
例子:
hadoop fs -touch 路径名
hadoop fs -touch -m -t 20180809:230000 路径名
hadoop fs -touch -t 20180809:230000 路径名
hadoop fs -touch -a 路径名
touchz
用法:hadoop fs -touchz URI [URI ...]
创建一个零长度的文件。如果文件以非零长度存在,则返回错误。
例子:
hadoop fs -touchz 路径名
truncate
用法:hadoop fs -truncate [-w] <length> <paths>
将与指定文件模式匹配的所有文件截断为指定长度。
选项:
如果需要,-w 标志请求命令等待块恢复完成。
如果没有 -w 标志,文件可能会在恢复过程中保持不关闭一段时间。
在此期间,无法重新打开文件进行追加。
例子:
hadoop fs -truncate 55 /user/hadoop/file1 /user/hadoop/file2
hadoop fs -truncate -w 127 hdfs://nn1.example.com/user/hadoop/file1
concat
用法:hadoop fs -concat <目标文件> <源文件>
将现有源文件连接到目标文件中。目标文件和源文件应在同一目录中。
例子:
hadoop fs -concat hdfs://cluster/user/hadoop/target-file hdfs://cluster/user/hadoop/file-0 hdfs://cluster/user/hadoop/file-1
fsck
Usage: hdfs fsck <path> [-list-corruptfileblocks | [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]]
# 你要检测的目录,如果不写默认为根目录 /
<path> start checking from this path
# 把损坏的文件移动到/lost+found
-move move corrupted files to /lost+found
# 直接删除损坏的文件
-delete delete corrupted files
# 打印被检测的文件
-files print out files being checked
# 打印检测中的正在被写入的文件
-openforwrite print out files opened for write
# 检测的文件包括系统snapShot快照目录下的
-includeSnapshots include snapshot data if the given path indicates a snapshottable directory or there are snapshottable directories under it
# 打印损坏的块及其所属的文件
-list-corruptfileblocks print out list of missing blocks and files they belong to
# 打印 block 的信息
-blocks print out block report
# 打印 block 的位置,即在哪个节点
-locations print out locations for every block
# 打印 block 所在rack
-racks print out network topology for data-node locations
# 打印 block 存储的策略信息
-storagepolicies print out storage policy summary for the blocks
# 打印指定blockId所属块的状况,位置等信息
-blockId print out which file this blockId belongs to, locations (nodes, racks) of this block, and other diagnostics info (under replicated, corrupted or not, etc)
[hdfs@apm-cdh03 ~]$ hdfs fsck /
Connecting to namenode via http://apm-cdh03:50070/fsck?ugi=hdfs&path=%2F
FSCK started by hdfs (auth:SIMPLE) from /172.18.8.154 for path / at Thu Oct 21 15:52:27 CST 2021
............................Status: HEALTHY
Total size: 745148085 B #hdfs集群存储大小,不包括复本大小,B->KB->m->G->TB
Total dirs: 79 #代表检测的目录下总共有多少个目录
Total files: 28 #代表检测的目录下总共有多少文件
Total symlinks: 0 (Files currently being written: 1) #代表检测的目录下有多少个符号连接
Total blocks (validated): 28 (avg. block size 26612431 B) #代表检测的目录下有多少个block块是有效的
Minimally replicated blocks: 28 (100.0 %) #代表拷贝的最小block块数
Over-replicated blocks: 0 (0.0 %) #多余的副本块
Under-replicated blocks: 0 (0.0 %) #正在复制块数量
Mis-replicated blocks: 0 (0.0 %) #正复制的缺少复制块的数量
Default replication factor: 3 #默认的复制因子
Average block replication: 3.0 #当前块的平均复制数,如果小 default replication factor,则有块丢失
Corrupt blocks: 0 #坏块的数量,这个值不为0,则说明当前集群有不可恢复的块,即数据有丢失了
Missing replicas: 0 (0.0 %) #缺少复制块的数量,通常情况下Under-replicated blocks\Mis-replicated blocks\Missing replicas 都为0,则集群健康,如果不为0,则缺失块了
Number of data-nodes: 3 #datanode的节点数量
Number of racks: 1 #机架数量
FSCK ended at Thu Oct 21 15:52:27 CST 2021 in 16 milliseconds
The filesystem under path '/' is HEALTHY
当下架节点时Under-replicated blocks\Mis-replicated blocks\Missing replicas,这三个参数会显示当前,需要补的块的数量,集群会自动补全,当三个参数都为0时,则集群块的复制块完全了。
# hdfs fsck /input/wc.input -files -blocks -locations -replicaDetails #查找实际磁盘存储路径
Connecting to namenode via http://apm-cdh03:50070/fsck?ugi=root&files=1&blocks=1&locations=1&replicadetails=1&path=%2Finput%2Fwc.input
FSCK started by root (auth:SIMPLE) from /172.18.8.154 for path /input/wc.input at Thu Oct 21 17:16:14 CST 2021
/input/wc.input 75 bytes, 1 block(s): OK
0. BP-924615043-172.18.8.154-1634274494505:blk_1073742115_1291 len=75 repl=3 [DatanodeInfoWithStorage[172.18.9.187:50010,DS-6582fba2-aa06-4ae0-af6e-e5ac36e349fe,DISK](LIVE), DatanodeInfoWithStorage[172.18.8.19:50010,DS-b5e549a6-a61e-404d-b942-792c2201219a,DISK](LIVE), DatanodeInfoWithStorage[172.18.8.154:50010,DS-7b02b2f4-8497-41aa-9134-455d3c9baa5a,DISK](LIVE)]
[root@apm-cdh02 ~]# find / -name blk_1073742115
/data3/hadoop/hdfs/data/current/BP-924615043-172.18.8.154-1634274494505/current/finalized/subdir0/subdir1/blk_1073742115