最近在使用hadoop的过程中,发现了一个情况。 当我使用c api向hdfs联邦模式router节点rpc端口发送请求时,比如说写文件,客户端发送完成请求后,hadoop端需要20分钟延时文件才有字节大小,延时期间不能对文件进行操作。
客户端这边运行结束之后,hadoop端日志大致过程: 1.namenode接收到客户端的请求,FSEditLog打印日志。 2.blockmanager.BlockPlacementPolicy: 提示没有足够的副本可供选择. Reason:{NO_REQUIRED_STORAGE_TYPE=1} 3.StateChange: 分配block 4.StateChange: 为hadoop目录文件获取租约 5.ipc.Server: 检查租约的方法抛了个异常 LeaseExpiredExcepion: INode is not a regular file: / 6.(开始等待) 7.20分钟后,达到hard limit最大值限制。强制关闭租约。 8.触发 Lease recovery 9.然后才可执行成功。 我也怀疑过是客户端的问题。但是我做了几组测试,(都是用c api向hadoop发送写请求,以下简写) 3.3.1版本、router、rpc端口。 --> 有20分钟延时 3.3.1版本、namenode、rpc端口。 --> 无问题 3.3.1版本、router、http端口。 --> 无问题 3.3.1版本、namenode、http端口。--> 无问题 3.1.1版本、router、rpc端口。 --> 无问题 3.1.1版本、namenode、rpc端口。 --> 无问题 3.1.1版本、router、rpc端口。 --> 无问题 3.1.1版本、namenode、rpc端口。 --> 无问题 以下是我的猜测: 从hadoop日志中看,猜测是3.3.1版本、router、rpc端口一开始未获取到租约,所以导致无法正常关闭租约,直到hard limit触发,才能退出。但是我无法解释为什么相同的客户端,3.1.1版本就无该现象。我怀疑是版本的变化改动与libhdfs3.so的某个部分不适配导致这一现象。 如果有人发现类似的情况,我希望得到回复,为我指明这个问题的方向。, | | 王继泽 | | y98d...@163.com |