现象描述:线上任务出现失败,日志中显示查找计算用的block失败。
现象分析:NN记录了block的所在的DN,但是DN上却没有了这个block;通常,删除过程是先删除NN\DN上的数据,然后再删除磁盘上的数据。
肯定是某种条件,使得NN恢复了block信息,而DN上的确删除了block。经过分析发现,是两个线程的协调,引入这个问题。
问题原因:NN下发删除block命令到DN,DN先删除自己cache中的block,然后将要删除的block扔到删除队列中异步删除(a1,a2)。
而DN会每隔一定时间,report自己的block信息给NN(b1,b2),以保持数据同步。如果这时候队列中的没有删除干净,则仍然会收集过来。
扫描到的block会对DN的cache查缺补漏,同时使用DN cache的block信息给NN,NN发现了多于副本数的block,会随机删除block。
如果频繁这种情况发生,则会丢失数据。
Hadoop HDFS 数据丢失:DN 删除队列与Block Report 纠纷解析

线上任务因查找block失败导致失败,分析发现NN记录了block但DN已删除。问题源于NN删除命令与DN的异步删除队列及block报告线程协调不当。当DN未完全删除block即报告给NN,NN误判多余副本并随机删除,引发数据丢失。该问题主要在对单独block操作如balancing时触发,修改方案为DN报告线程直接汇报丢失block给NN。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



