Hadoop HDFS bug备忘:DN的删除队列与block report的协调引起的数据丢失

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

现象描述:线上任务出现失败,日志中显示查找计算用的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。

                  如果频繁这种情况发生,则会丢失数据。

触发条件:文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值