dfs.content-summary.limit详解

本文主要介绍hdfs dfs du命令相关的介绍,包括dfs.content-summary.limit和dfs.content-summary.sleep-microsec参数详解。

du介绍

hdfs dfs du命令本质上对应的是linux du命令。du命令是一个Linux文件系统命令,用于统计目录(或文件)所占磁盘空间的大小。du命令中的“du”代表“Disk Usage”,即磁盘使用情况。使用du命令时,可以通过指定路径参数来指定要计算磁盘使用量的文件或目录。例如,du 文件名会显示该文件的磁盘使用量,而du 目录名会显示该目录及其子目录的总大小。此外,du命令还提供了多种选项来定制输出格式和显示内容。例如,-s选项可以仅显示指定文件或目录的总磁盘使用量,而不显示详细信息;-h--human-readable选项可以以K、M、G为单位显示大小,提高信息的可读性。
总的来说,du命令可以帮助用户快速了解文件或目录在磁盘上的占用情况。

rpc getContentSummary

不管是hdfs dfs -du还是hdfs dfs -count本质上都是使用的rpc getContentSummary 接口。此接口可以返回使用量和文件数的情况。这个接口的实现逻辑本质上是递归遍历目录和统计目录下的文件容量个数。还有一个需要注意的地方此接口是非常耗时以及占用资源的,因为一是要递归遍历,二是这个接口会锁住顶层要遍历的目录,所以要谨慎使用。

参数列表

参数 默认值 描述
dfs.content-summary.limit 5000 单次最大遍历文件数。
dfs.content-summary.sleep-microsec 500 目录文件锁释放时间,单位毫秒。

dfs.content-summary.limit

单次遍历最大文件数,默认值为5000。递归目录是非常耗时的,所以最怕的是在用户不了解此接口的情况下,调用了此接口。假设hdfs上有上亿文件,用户不小心du了根目录,那将是灾难性的。此参数的出现保证了接口可以有限度的返回结果,当文件数过多时,最多统计5000个文件,保证了接口返回的时效性。笔者认为这是个非常好的设计,如果程序中有相同的场景也可以使用此方式。还有要注意的是由于是递归目录以后判断文件数是否达到上限,所以实际统计会超过这个数量。

dfs.content-summary.sleep-microsec

目录文件锁释放时间,默认为500毫秒。由于统计时会对最上层目录加锁,又由于统计时非常耗时操作,长时间加锁是非常危险的设计。如果在文件读写频繁的系统中,会导致后续写请求的堆积。为了解决这个问题,hdfs的设计者想到了一个方法,就是在遍历完一个目录以后,释放一定时间的锁,然后再加锁,继续统计,这个时间间隔就是dfs.content-summary.sleep-microsec。笔者认为这个有利有弊,可能弊还大于利。因为首先一点是统计时间必然会增加,相当于统计性能的下降;二是本质上500毫秒对于后续的请求可能也起不到太大作用。当然其实这个也是无奈之举,我们知道hdfs的锁一般都是大锁,比较粗犷。

总结

笔者认为大家还是慎用统计接口,如果真的需要,可以自己实现也可以。

喜欢就点赞、收藏一下~

未经允许禁止转载~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇