compact 失败报错 this file lease is currently owned by DFSClient_xx

  其他常见问题
内容纲要

概要描述

本文描述出现 orc 事务表在 yarn 上合并失败出现类似报错“Failed to CREATE_FILE [path] on [ip] because this file lease is currently owned by DFSClient_xx” 的处理方法


详细描述

出现这种情况一般是因为 hadoop 有 lease 机制,避免同时写入同一个文件;


问题描述

orc事务表的compact任务提交到YARN上出现如下类似报错:具体的报错信息在其他场景类似:

2019-10-23 14:55:37,680 FATAL [IPC Server handler 20 on 45299] org.apache.hadoop.mapred.TaskAttemptListenerImpl: Task: attempt_1571800374156_0269_m_000000_1 - exited : org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException): Failed to CREATE_FILE /inceptor1/user/hive/warehouse/myjob.db/my170502266/ddcr_zhibiao04/tmp_aaa5b75e-af4c-4c56-83bc-b2fc6e24ae60/base_3773807/bucket_00004 for DFSClient_attempt_1571800374156_0269_m_000000_1-245523098_1 on 10.106.20.25 because this file lease is currently owned by DFSClient_attempt_1571800374156_0269_m_000000_0_-1328809537_1 on 10.106.20.15

问题原因

一般这个情况多出现在表数据倾斜时,且需要 compact 时导致的。orc 事务表,可以在 hdfs 的对应 location 上观察一下是否出现了数据倾斜。
当出现数据倾斜时,mapreduce 阶段会出现掉队者,掉队者是指那些跑的很慢但是最终可以执行成功的任务。此时 mapreduce 的推测机制会生效,可以识别那些跑的任务比较慢的任务,但是不会清理掉队者的任务,而是会产生另一个等效的任务作为备份,并使用首先完成的那个任务的结果,这种技术称为推测执行(speculative execution)。
这种机制是为了保证 mapreduce 的执行效率,但是当操作 hdfs 文件时,如果出现同时写操作,hdfs 的 lease 管理员是不允许同时被两个写入程序占用的。

解决方案

关闭 yarn 上的 mapreduce 的推测执行(speculative execution);
yarn 配置页面,添加自定义参数 mapreduce.map.speculative ,值设置为 false,然后配置服务重启一下 yarn 和 inceptor,重新执行 compact 即可;

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。