【问题解决办法】
可以通过调整参数 dfs.client.block.write.locateFollowingBlock.retries的值来增加retry的次数,可以将值设置为6,那么中间睡眠等待的时间为400ms、800ms、1600ms、3200ms、6400ms、12800ms,也就是说close函数最多要50.8秒才能返回。
但是该dfs.client.block.write.locateFollowingBlock.retries 在开源配置中不开放,调整参数也只能规避问题,若CPU负荷很大的情况,依然会存在该问题。
建议降低任务并发量或者控制cpu使用率来减轻网络的传输,使得DN能顺利向NN汇报block情况。
问题结论:
减轻系统负载。集群发生的时候负载很重,CPU的32个核(100%)全部分配跑MR认为了,至少要留20%的CPU