hdfs的bug纪录, Unexpected block state
今早遇到一个bug,提交 spark job 失败。说 hdfs 在 safe mode状态,不允许创建和删除文件。
然后发现 hdfs 的日志文件不断滚动,几乎每秒钟100M的速度打日志,当时没有看懂。safe mode 打开关闭了几回,发现主要的问题是下面这条日志:
java.lang.IllegalStateException: Unexpected block state: blk_1073748951_12122 is COMMITTED but not COMPLETE, file=application_1543829391405_0459_1.inprogress (INodeFile), blocks=[blk_1073748951_12122] (i=0)d
翻译:blk_1073748951_12122 坏了,该block属于文件 application_1543829391405_0459_1.inprogress
解决方案:删除该文件,关闭safe mode。
问题推测:我们的 yarn 集群运行在 aws 上,配置了弹性伸缩的策略。 application_1543829391405_0459_1.inprogress 属于一个 spark application 的meta信息。
可能是弹性收缩,也可能是偶然因素,导致 block 数据丢失,于是引发问题:
1. spark application 失败
2. dfs自我修复,疯狂打日志
3. 打开了 safe mode,无法提交新的任务