Hadoop HDFS bug备忘:DN的删除队列与block report的协调引起的数据丢失
2013-12-16 17:38
309 查看
现象描述:线上任务出现失败,日志中显示查找计算用的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。
如果频繁这种情况发生,则会丢失数据。
触发条件:文件删除不会引起上面的问题,因为文件不存在了,相应的block就不存在了,汇报上来仍然会被NN删除。单独对block 的操作引起这个问题(如balance)。
bug修改:对于report线程,扫描结果直接汇报给NN(存储在单独的MAP中),那么下次扫描时,真正丢失的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。
如果频繁这种情况发生,则会丢失数据。
触发条件:文件删除不会引起上面的问题,因为文件不存在了,相应的block就不存在了,汇报上来仍然会被NN删除。单独对block 的操作引起这个问题(如balance)。
bug修改:对于report线程,扫描结果直接汇报给NN(存储在单独的MAP中),那么下次扫描时,真正丢失的block就会被复制回来
相关文章推荐
- Hadoop HDFS DN 内核Bug
- Hadoop学习——HDFS数据存储和删除
- hadoop重启虚机后hdfs中数据丢失,需要重新格式化问题
- ccflow 删除附件bug&审核时节点字段数据丢失bug&递归查找签核人bug
- 机房断电引起hadoop hdfs corrupt blocks
- 同一个事务里 查询 已删除但是未提交的数据[bug记录]
- 使用Hadoop的MapReduce与HDFS处理数据
- MapReuce笔记四之hadoop类型和MR操作hdfs数据实例
- bug:ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception in doCheckpoint
- 大数据1-hadoop架构体系中的【Hadoop】HDFS的运行原理
- hadoop源码研读之路(七)----HDFS的数据管理
- hadoop-3.0.0-beta1运维手册(007):hdfs3.0.0基本操作-上传、下载、删除文件或目录
- 关于Hadoop HDFS数据均衡。
- Hadoop学习——HDFS数据备份与放置策略
- 王家林最受欢迎的一站式云计算大数据和移动互联网解决方案课程 V1(20140809)之Hadoop企业级完整训练:Rocky的16堂课(HDFS&MapReduce&HBase&Hive&Zookee
- Hadoop源码分析之客户端读取HDFS数据
- 删除rabbitmq中持久化的队列和数据
- Hadoop学习--AP读取HDFS数据--day04
- Hadoop Cluster启动后数据节点(DataNode)进程状态丢失
- Hadoop源代码的边角料:HDFS的数据通信机制