1、现象:

Hadoop3.1删除大量文件(程序删除、清理回收站)导致RPC高延迟

2、调研与监控分析

2.1、逻辑如下图

image.png

2.2监控分析

采用Alibaba arthas监控方法栈耗时
tracde org.apache.hadoop.hdfs.server.namenode.FSNamesystem removeBlocks -n 5 ‘#cost > 50’ —skipJDKMethod false
image.png
trace org.apache.hadoop.hdfs.server.namenode.FSNamesystem removeBlocks -n 100000 ‘#cost > 150’ —skipJDKMethod false >> &
image.png
trace org.apache.hadoop.hdfs.server.namenode.FSNamesystem delete -n 100000 ‘#cost > 150’ —skipJDKMethod false >> &
image.png
image.png

3、结论

Hadoop新版本的FoldedTreeSet(存储block Info)的红黑树实现是有问题的,尤其在删除大量文件时,表现很糟糕

4、解决(优化)方案

image.png
将JIRA 中linyiqun先生提出的HDFS-13831的patch打入(对应github地址),将BLOCK_DELETION_INCREMENT = 1000 hardCode变成可配置的dfs.namenode.block.deletion.increment参数,然后将此参数(增量删除块的个数)减少,以达到减小FoldedTreeSet(存储BlockInfo)数据结构的压力,进而减少hold lock时间,优化RPC