MRS应用开发认证失败常见问题
现象描述
MRS样例工程调试运行过程发现认证失败。
处理流程
出现认证失败的原因很多,在不同场景中建议参考以下步骤来排查:
- 确认本应用所运行设备和集群网络上是否通畅,Kerberos认证所需的各类端口(TCP/UDP)是否可正常访问。
- 确认各个配置文件是否被正确读取到,路径是否保存正确。
- 确认用户名和keytab文件是按操作指导得到的。
- 确认各类配置信息是否已经先设置好了,再发起认证。
- 确认没有在同一个进程中发起多次认证,即重复调用login()方法。
- 若还有问题,需联系技术支持人员做进一步分析。
认证失败样例
解决认证出现如下关键字:clock skew too great的问题
- 检查集群时间。
- 检查开发环境所在机器的时间,与集群时间的偏差应小于5分钟。
解决认证出现如下关键字:(Receive time out) can not connect to kdc server的问题
- 要检查“krb5.conf”文件内容是否正确,即是否与集群中的KerberoServer的业务IP配置相同。
- 检查Kerberos服务是否正常。
- 检查防火墙是否关闭。
解决客户端应用提交任务到hadoop集群报错,提示Failed to find any Kerberos tgt或者No valid credentials provided的问题
- 检查是否执行了kinit,若未执行,则先执行kinit认证操作,再提交任务。
- 多线程场景下,需要在进程的开始处调用hadoop提供的loginfromkeytab函数登录KDC,得到TGT,后续提交任务之前,调用reloginFromKeytab函数刷新该TGT。
//进程入口首次登录,登录成功设置userGroupInformation UserGroupInformation.loginUserFromKeytab(this.userPrincipal,this.keytabFile); //线程提交任务之前: UserGroupInformation.getLoginUser().reloginFromKeytab();
- 多个脚本同时使用kinit命令认证同一个用户的场景下,需要在各个脚本中执行kinit命令之前,先执行export KRB5CCNAME=keytab_path命令,确保每个脚本进程中KRB5CCNAME指向的路径不一致。