更新时间:2024-05-28 GMT+08:00

MRS应用开发认证失败常见问题

现象描述

MRS样例工程调试运行过程发现认证失败。

处理流程

出现认证失败的原因很多,在不同场景中建议参考以下步骤来排查:

  1. 确认本应用所运行设备和集群网络上是否通畅,Kerberos认证所需的各类端口(TCP/UDP)是否可正常访问。
  2. 确认各个配置文件是否被正确读取到,路径是否保存正确。
  3. 确认用户名和keytab文件是按操作指导得到的。
  4. 确认各类配置信息是否已经先设置好了,再发起认证。
  5. 确认没有在同一个进程中发起多次认证,即重复调用login()方法。
  6. 若还有问题,需联系技术支持人员做进一步分析。

认证失败样例

解决认证出现如下关键字:clock skew too great的问题

  1. 检查集群时间。
  2. 检查开发环境所在机器的时间,与集群时间的偏差应小于5分钟。

解决认证出现如下关键字:(Receive time out) can not connect to kdc server的问题

  1. 要检查“krb5.conf”文件内容是否正确,即是否与集群中的KerberoServer的业务IP配置相同。
  2. 检查Kerberos服务是否正常。
  3. 检查防火墙是否关闭。

解决客户端应用提交任务到hadoop集群报错,提示Failed to find any Kerberos tgt或者No valid credentials provided的问题

  1. 检查是否执行了kinit,若未执行,则先执行kinit认证操作,再提交任务。
  2. 多线程场景下,需要在进程的开始处调用hadoop提供的loginfromkeytab函数登录KDC,得到TGT,后续提交任务之前,调用reloginFromKeytab函数刷新该TGT。

    //进程入口首次登录,登录成功设置userGroupInformation
    UserGroupInformation.loginUserFromKeytab(this.userPrincipal,this.keytabFile);
    //线程提交任务之前:
    UserGroupInformation.getLoginUser().reloginFromKeytab();

  3. 多个脚本同时使用kinit命令认证同一个用户的场景下,需要在各个脚本中执行kinit命令之前,先执行export KRB5CCNAME=keytab_path命令,确保每个脚本进程中KRB5CCNAME指向的路径不一致。