hadoop集群运行时遇到Unable to close file because the last block does not have enough number of replicas

6 篇文章 0 订阅

1.问题描述

hql脚本夜间调度时部分表随机出现了 Unable to close file because the last block does not have enough number of replicas 的报错。 手动重跑后恢复正常。在这里插入图片描述

2.查找原因

通过报错信息可以得知 最后一个block块没有足够的副本而不能关闭文件。 这说明了在某一时刻可能有任务大量读取blocks,耗费了过多的资源。 因此我打开了cm来查看,发现在3点10左右blocks读取过大。
在这里插入图片描述
于是开始排查3点10分左右运行的任务(重点排查分区dt存在 between的任务,因为分区跨度大的话读取的blocks也会过多),经过排查发现某个任务跨分区较多,某一时刻瞬间读取了3000多个blocks,最终造成了副本不足。

3.解决办法 (建议使用第一种方法)

1)排查出读取blocks过多的任务,对该任务进行优化调整,缩短读取的时间范围或通过中间表的形式进行查询,尽可能的不要一次读取过多blocks。
2)可以通过调整参数dfs.client.block.write.locateFollowingBlock.retries的值来增加retry的次数,可以将值设置为6(默认5次),那么中间睡眠等待的时间为400ms、800ms、1600ms、3200ms、6400ms、12800ms,也就是说close函数最多要50.8秒才能返回。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值