在启用了Kerberos的ambari集群上添加组件
背景
有一个项目的ambari集群启用了Kerberos认证,总共有24台机器,只有5台机器部署了NodeManger,可用资源只有220G,60核,高峰期业务排队时间较长,同时其他机器资源利用率低,业主希望在所有机器上都部署上yarn,提供作业并行度。
步骤
1 .修复安装服务时卡在install pending的异常
在ambari页面点击了添加服务之后,组件状态一直卡在“install pengding”,观察ambari-server的日志,后台一直在刷
ERROR [ambari-client-thread-35] KerberosHelperImpl:1938 - The 'krb5-conf' configuration is not available
查阅相应源码 KerberosHelperImpl.java
private KerberosDetails getKerberosDetails(Cluster cluster, Boolean manageIdentities)
throws KerberosInvalidConfigurationException, AmbariException {
......
Config configKrb5Conf = cluster.getDesiredConfigByType("krb5-conf");
if (configKrb5Conf == null) {
String message = "The 'krb5-conf' configuration is not available";
LOG.error(message);
throw new AmbariException(message);
}
......
Config configKerberosEnv = cluster.getDesiredConfigByType("kerberos-env");
if (configKerberosEnv == null) {
String message = "The 'kerberos-env' configuration is not available";
LOG.error(message);
throw new AmbariException(message);
}
......
}
ClusterImpl.java
public Config getDesiredConfigByType(String configType) {
loadConfigurations();
clusterGlobalLock.readLock().lock();
try {
for (ClusterConfigMappingEntity e : clusterDAO.getClusterConfigMappingEntitiesByCluster(getClusterId())) {
if (e.isSelected() > 0 && e.getType().equals(configType)) {
return getConfig(e.getType(), e.getTag());
}
}
return null;
} finally {
clusterGlobalLock.readLock().unlock();
}
}
发现ambari不是调用的系统/etc/krb5.conf,所以怎么修改都没有用,ambari将krb5.conf也记录到元信息库中,根据代码找到元信息记录
select config_id, selected, create_timestamp from clusterconfig where type_name = 'kerberos-env';
config_id | selected | create_timestamp
208 | 0 | 1589796215822
210 | 0 | 1589800820822
(2 rows)
select config_id, selected, create_timestamp from clusterconfig where type_name = 'krb5-conf';
209 | 0 | 1589796215857
211 | 0 | 1589800820858
(2 rows)
发现所有记录的selected字段都是0,而代码里明确写了,只有selected的值大于0才有效,所以解决办法就是
update clusterconfig set selected=1 where config_id=210;
update clusterconfig set selected=1 where config_id=211;
2.添加服务
通过ambari server webUI添加需要安装的服务,可能会弹出输入管理员的kerberos帐号密码的弹框,直接填好就行
3.分发keytab
在给机器添加新组件时,ambari会创建对应服务和主机名的principal,但是不会生成keytab,此时应该有两种方案,一时通过ambari 的webUI 重新生成所有keytab,但因为有服务在运行,所以采用手动分发的方式
kadmin.local
ktadd -norandkey -k /root/keytab/dn.service.keytab.node1 dn/node1@TEST.COM
exit
scp /root/keytab/dn.service.keytab.node1 root@node1:/etc/security/keytabs/dn.service.keytab
ssh node1 "chown hdfs:hadoop /etc/security/keytabs/dn.service.keytab"
4.重启已添加的服务
ambari 页面操作
5.修改yarn队列配置文件 fair-scheduler.xml
|