蛤大菰 2020-09-20 10:37 采纳率: 0%
浏览 104

HDFS在异常写入时是怎么保证不出现DN中数据重复的?

假如有三个DN节点,按机架距离感知依次为d1,d2,d3。传输某一个packet时, d2长时间没有返回ack,NN认为d2故障,剔除掉d2重新建立数据通道。同时客户端将发送队列中的packet返回到等待队列,这样做的目的是为了保证d3不出现数据缺失。

但是我的d1在故障前已经接受到了最新的1个packet并且已经给NN发送了ack,发送队列回滚后,重新与d1建立通道并发送数据,这样做应该会造成d1中的数据重复。

所以这里解决方式可能有两种选择,一个是通过NN根据返回ack发现数据重复,请求d1删除相应数据;二是d1根据接受到的packet的校验和实现去重。
但是这两种方式是猜想,也没有查到相应的资料,是否还有其他解决方式?

还有一个问题为什么csdn问答里面选择问题标签的时候没有大数据或者hdfs的标签,也不能自定义。

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-09-20 11:08
    关注

    通讯原理不知道你学过没有

    就是这种情况为了可靠传输,必须通过牺牲有效性来达成。也就是说,如果长时间没有得到数据,就认为数据丢失(不完整的数据发生回滚),即使之后再收到了数据也不承认。
    这样对你的数据增加事务性锁,保证读取-修改-写入的操作是原子性的。

    评论

报告相同问题?

悬赏问题

  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教
  • ¥15 怎么找志同道合的伙伴
  • ¥20 如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件
  • ¥50 爬虫预算充足,跪巨佬
  • ¥15 滑块验证码拖动问题悬赏