本文描述问题及解决方法同样适用于 弹性 MapReduce(EMR)。
多个开启 kerberos 的 hadoop 集群之间要做通信(跨集群的数据迁移等),因为 Kerberos 原因无法正常进行,本文档说明了多 kerberos 集群下做跨域认证的方法。
集群A、B都开启了kerberos认证
其中: 集群A -> EMR-5ZP6Q4SO 集群B -> EMR-026X9ZB6
#EMR-5ZP6Q4SO
kadmin.local:addprinc -e "des3-cbc-sha1" krbtgt/EMR-5ZP6Q4SO@EMR-026X9ZB6
kadmin.local:addprinc -e "des3-cbc-sha1" krbtgt/EMR-026X9ZB6@EMR-5ZP6Q4SO
#EMR-026X9ZB6
kadmin.local:addprinc -e "des3-cbc-sha1" krbtgt/EMR-5ZP6Q4SO@EMR-026X9ZB6
kadmin.local:addprinc -e "des3-cbc-sha1" krbtgt/EMR-026X9ZB6@EMR-5ZP6Q4SO
注:如果你的kerberos不是勾选emr的kerberos,那么-e参数后面加的编码方式和你手搭的Kerberos集群创建凭据时指定的编码方式要一致,并且上述添加的凭据需要保持密码一致(kdc密码,emr集群为集群的root密码)
在控制台core-site.xml集群维度下发(注,值要根据实际的集群做相应的替换)
hadoop.security.auth_to_local
RULE:[1:$1@$0](^.*@EMR-026X9ZB6$)s/^(.*)@EMR-026X9ZB6$/$1/g
RULE:[2:$1@$0](^.*@EMR-026X9ZB6$)s/^(.*)@EMR-026X9ZB6$/$1/g
RULE:[1:$1@$0](^.*@EMR-5ZP6Q4SO$)s/^(.*)@EMR-5ZP6Q4SO$/$1/g
RULE:[2:$1@$0](^.*@EMR-5ZP6Q4SO$)s/^(.*)@EMR-5ZP6Q4SO$/$1/g
DEFAULT
修改完成后可以做下验证:
hadoop org.apache.hadoop.security.HadoopKerberosName hadoop/ip@EMR-5ZP6Q4SO
Name: hadoop/ip@EMR-5ZP6Q4SO to hadoop
则说明配置成功
在EMR-026X9ZB6的/etc/krb5.conf文件中添加如下信息
[capaths]
EMR-026X9ZB6 = {
EMR-5ZP6Q4SO = .
}
在EMR-5ZP6Q4SO中添加如下
[capaths]
EMR-5ZP6Q4SO = {
EMR-026X9ZB6 = .
}
为使得集群a可以访问集群b的KDC,需要将集群a的KDC Server配置到集群b中,如下,反之相同:
[realms]
EMR-5ZP6Q4SO = {
kdc = 10.0.0.125:88
admin_server = 10.0.0.125
kdc = 10.0.0.73:88
admin_server = 10.0.0.73
default_domain = EMR-5ZP6Q4SO
}
EMR-026X9ZB6 = {
kdc = 10.0.0.129:88
admin_server = 10.0.0.129
kdc = 10.0.0.9:88
admin_server = 10.0.0.9
default_domain = EMR-026X9ZB6
}
[domain_realm]
# .example.com = EXAMPLE.COM
10.0.0.125 = EMR-5ZP6Q4SO
10.0.0.129 = EMR-026X9ZB6
注意:这里需要把集群所有节点的ip和其对应的kdc realm做关联对应 至此krb5.conf修改完成,将这个配置同步到本集群的其他节点(包括core/master/common/router)
在控制台修改hdfs-site.xml
dfs.namenode.kerberos.principal.pattern *
集群维度下发
重启kerberos 重启yarn rm 重启hdfs nn 做验证(跨集群读写/distcp等)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。