错误总结分享: 使用了hadoop挺长时间了,多数人应该很熟悉它的特点了吧,但是今天突然遇到个错误,从来没见过,一时自己也想不到是什么原因,就在网上查了一些资料,得到了解决的办法,再次分享一下。
过程: 使用kettle 数据清洗工具在进行同步任务的过程中,最后数据是被加载到hdfs的,这里用shell脚本实现,hdfs dfs -put -r /hdfs的目录。 结果程序执行到这一步的时候报错了。错误描述就是文章标题的错误,翻译过来就是租赁不匹配,大概就是这样子,看了别人的 分析就理解了错误。开始还以为是集群中节点挂了呢。
HDFS(及大多数分布式文件系统)不支持文件并发写,Lease是HDFS用于保证唯一写的手段。
Lease可以看做是一把带时间限制的写锁,仅持有写锁的客户端可以写文件。
租约的有效期
HDFS的Lease设定了两个时间限制:softLimit(默认1m),hardLimit(默认1h);
- Lease持有者在softLimit时限内可以写文件,且不用担心被其它写者抢走Lease;
- 在超过softLimit仅未及hardLimit时限可以续约,否则Lease可能被其它写者申请走;
- 在超过hardLimit后,Lease会被释放,写者需要重新申请Lease;对hardLimit的超时检查是由Namenode的lmthread线程执行;