在HDFS集群执行du命令触发java.util.ConcurrentModificationException问题求助
解决HDFS
du 命令触发 java.util.ConcurrentModificationException 异常 我之前维护HDFS集群时也踩过这个坑!当执行hdfs dfs -du(或者集群节点上直接操作的du相关命令)时,突然抛出java.util.ConcurrentModificationException错误,查了不少资料才确认这是Hadoop 2.7.0版本的已知Bug。
问题本质
这个Bug的核心原因是:du命令在统计目录大小需要遍历HDFS文件系统树时,若同时有其他操作(比如文件写入、目录删除)在修改这个树结构,内部的遍历迭代器就会因为并发修改触发Java的并发修改检查,进而抛出异常。
临时规避方案
如果暂时没办法升级集群版本,可以试试这几个临时办法:
- 避开集群负载高峰或者文件变更频繁的时段执行
du,降低并发冲突的概率; - 执行
du时添加-s参数,只统计目标路径的总大小,减少遍历的深度和耗时,从而降低触发异常的可能性; - 针对特定目录执行
du前,先确认该目录没有正在进行的写入、删除或移动操作,再执行统计命令。
彻底解决办法
最稳妥的方式是升级Hadoop版本——这个Bug在后续的2.7.x小版本(比如2.7.1及以上)以及更高的大版本中已经被官方修复,升级后就能彻底消除这个问题。
内容的提问来源于stack exchange,提问作者Abdurrahman Adebiyi
相关产品推荐
相关产品推荐

