目前hbase cleaner是整集群全部分组的大轮询清理方式。
当表region数量过多,如上万,整体compact移入archive的文件速度>cleaner扫描目录和删除文件的速度时,archive内的文件会积压。
优化方法对比
-
修改cleaner配置,优化线程池配置,提高扫描目录的线程数量;(实验证明不是线程数越多效率越高,一定程度后增加线程数量反而会降低扫描目录的效率。)
-
隔离大表的cleaner线程池,避免大轮询的扫描删除等待:
社区的大轮询删除逻辑不适用与表之间写入量相差较大的场景。
-
cleaner线程池的队列使用优先级队列:保证大文件/目录可以优先处理;
-
batch调用listFileStatus接口,增加访问NN的效率;(实验证明batch操作不能提高客户端扫描的效率。)
-
按路径定制化cleaner,根据目录配置cleaner相关的配置。(实验证明cleaner瓶颈还是在客户端,且在SnapshotHFileCleaner中。)