[HDFS]hdfs租约--我们flink写hdfs做checkpoint时候失败导致文件缺失

文件实际是写完的,因为checkpoint做失败了,导致文件没有被hdfs计算在内。

我们用flink 写入到hdfs,报错信息会提示replicas副本数量不足。

hdfs元信息里面记录的文件大小和实际落地的文件大小不一致。

导致hive的任务只获取到一部分数据。

这种情况很偶发,认为是hdfs集群负载过高导致。

但是集群的运维说其实这种问题也出现过几次了,其实就是hdfs的租约问题。

hdfs 写到最后,checkpoint失败的话,导致元数据没有及时被更新,导致读不到这个文件。或者读取有问题

解决:加上flink任务状态和错误日志的监控,出现问题告警。

但是实际上是因为checkpoint 失败,导致hdfs租约失败。

比如一个20k的文件,写到5k的时候,元数据记录成5k,然后后续还没更改元数据,然后客户端断了,可能会导致强制关闭文件。

然后会文件大小和元数据记录的大小不一致,文件就有问题。

关于hdfs的租约,网上也有很多详细的资料:

https://blog.csdn.net/androidlushangderen/article/details/52850349

总结:在HDFS中,当每次客户端用户往某个文件中写入数据的时候,为了保持数据的一致性,此时其它客户端程序是不允许向此文件同时写入数据的。那么HDFS是如何做到这一点的呢?答案是租约(Lease)。换句话说,租约是HDFS给予客户端的一个写文件操作的临时许可证,无此证件者将不被允许操作此文件
 


版权声明:本文为pmdream原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。