提供免费空间的网站,wordpress qa,如何百度推广,有什么做外贸的网站kerberos 服务重启之后异常
项目中用到了hive 和hdfs #xff0c;权限认证使用了Kerberos#xff0c;因为机房异常#xff0c;导致了Kerberos 服务重启#xff0c;结果发现本来运行正常的应用服务hive 和hdfs 认证失败#xff0c;报错信息是 典型的网络连接异常
排查思路…kerberos 服务重启之后异常
项目中用到了hive 和hdfs 权限认证使用了Kerberos因为机房异常导致了Kerberos 服务重启结果发现本来运行正常的应用服务hive 和hdfs 认证失败报错信息是 典型的网络连接异常
排查思路
验证Kerberos 服务
首先想到Kerberos服务异常防火墙拦截。通过hdfs 命令发现 Kerberos 服务正常。 后边自己写了一个hive 链接测试应用发现同一台机器上可以正常验证通过访问hive。
排查为什么拒绝链接
应用本身上线有一段时间期间未发生这种报错所以思路集中在配置文件服务器hosts配置方向后边通过自己的测试服务 正常链接排除的环境因素那么就是程序本身问题奇怪的点事本身服务运行正常突然报异常了。
这个就有点奇怪之后对比了代码发现
Kerberos 配置写法导致
正确的写法 try {Class.forName(JDBC_DRIVER);//登录Kerberos账号String keytabPath /opt/data/kerberos/ keytab;Configuration configuration new Configuration();configuration.set(hadoop.security.authentication, Kerberos);configuration.set(java.security.krb5.conf, /opt/data/kerberos/krb5.conf);UserGroupInformation.setConfiguration(configuration);UserGroupInformation.loginUserFromKeytab(krbUser, keytabPath);System.out.println(Kerberos 验证通过);Connection connection null;ResultSet rs null;PreparedStatement ps null;try {connection DriverManager.getConnection(CONNECTION_URL);ps connection.prepareStatement(select * from ods_inc.k02_city);rs ps.executeQuery();while (rs.next()) {System.out.println(rs.getString(1));}} catch (Exception e) {e.printStackTrace();}} catch (ClassNotFoundException | IOException e) {e.printStackTrace();return exception;}return finish;}产生异常的写法
try {log.debug(keyTabPath);log.debug(confPath);//设置krb配置文件路径,注意一定要放在Configuration前面不然不生效System.setProperty(java.security.krb5.conf, confPath);Configuration conf new Configuration();//设置认证模式Kerberosconf.set(hadoop.security.authentication, Kerberos);UserGroupInformation.setConfiguration(conf);//设置认证用户和krb认证文件路径UserGroupInformation.loginUserFromKeytab(krbUser, keyTabPath);log.info(Kerberos 验证成功);} catch (Exception e) {e.printStackTrace();log.error(Kerberos 验证失败, e);throw new PluginException(Kerberos 验证失败, e);}关键点是 System.setProperty(“java.security.krb5.conf”, confPath); 这个配置文件在Kerberos 服务重启之后不生效了。
至于为什么不生效欢迎高手一起研究交流。
总结
Kerberos 服务认证 内嵌在jdk中某些jdk版本会导致Kerberos 认证异常Kerberos 认证抛出的异常信息不足很多时候排查问题比较耗费时间甄别这种突然爆出的异常 应该和程序初始化有关系或者Kerberos 服务重启之后的某些因素影响。
问题比较罕见如果应用服务中环境可以通过防火墙策略配置不建议使用Kerberos 认真大数据组件。