1.修改hdfs配置
在两个集群的hdfs-site.xml中添加以下内容:
<property>
<name>dfs.namenode.rpc-bind-host</name>
<value>0.0.0.0</value>
<description></description>
</property>
<property>
<name>dfs.namenode.servicerpc-bind-host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>dfs.namenode.http-bind-host</name>
<value>0.0.0.0</value>
<description></description>
</property>
<property>
<name>dfs.namenode.https-bind-host</name>
<value>0.0.0.0</value>
<description></description>
</property>
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
<description>Whether clients should use datanode hostnames when connecting to datanodes.
</description>
</property>
<property>
<name>dfs.datanode.use.datanode.hostname</name>
<value>true</value>
<description>Whether datanodes should use datanode hostnames when connecting to other datanodes for data transfer.</description>
</property>
<property>
<name>dfs.namenode.kerberos.principal.pattern</name>
<value>*</value>
<description></description>
</property>
2.配置两个集群的hosts
由于hadoop集群之间数据迁移是分布式数据传输,要求两个集群的主机都能识别对方集群的主机名,因此需要在两个集群的各个主机的/etc/hosts文件中,都配置两个集群所有主机的ip主机名映射。
3.在两个集群中创建相同加密算法的共享principal
在源集群ZETA_RANGER.COM中:
kadmin.local: addprinc krbtgt/ZETA_RANGER.COM@PANEL.COM
kadmin.local: addprinc krbtgt/PANEL.COM@ZETA_RANGER.COM
在目的集群PANEL.COM中:
kadmin.local: addprinc krbtgt/ZETA_RANGER.COM@PANEL.COM
kadmin.local: addprinc krbtgt/PANEL.COM@ZETA_RANGER.COM
注意:如果两个集群的kdc的默认加密算法不同,需要在addprinc时指定相同的加密算法,如:
kadmin.local: addprinc -e "aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal" krbtgt/ZETA_RANGER.COM@PANEL.COM
验证两个集群中新增后的principal加密算法是否相同:
kadmin.local: getprinc krbtgt/ZETA_RANGER.COM@PANEL.COM
kadmin.local: getprinc krbtgt/PANEL.COM@ZETA_RANGER.COM
4.在两个hdfs集群中增加彼此域中受信任的principal的命名匹配规则
在core-site.xml中通过hadoop.security.auth_to_local配置项增加受信任的kdc域的principal命名匹配规则,即让源集群和目的集群都信任对方的principal,增加如下内容:
RULE:[2:$1@$0]([ndj]n/.*@PANEL.COM)s/.*/hdfs/
RULE:[2:$1@$0](hdfs/.*@PANEL.COM)s/.*/hdfs/
RULE:[2:$1@$0](hive/.*@PANEL.COM)s/.*/hive/
RULE:[2:$1@$0]([ndj]n@PANEL.COM)s/.*/hdfs/
RULE:[2:$1@$0](hdfs@PANEL.COM)s/.*/hdfs/
RULE:[2:$1@$0](hive@PANEL.COM)s/.*/hive/
RULE:[2:$1@$0]([nd]n@ZETA_RANGER.COM)s/.*/hdfs/
RULE:[2:$1@$0](hive@ZETA_RANGER.COM)s/.*/hive/
RULE:[2:$1@$0]([nd]n/.*@ZETA_RANGER.COM)s/.*/hdfs/
RULE:[2:$1@$0](hive/.*@ZETA_RANGER.COM)s/.*/hive/
RULE:[1:$1@$0](^.*@ZETA_RANGER.COM$)s/^(.*)@ZETA_RANGER.COM$/$1/g
RULE:[2:$1@$0](^.*@ZETA_RANGER.COM$)s/^(.*)@ZETA_RANGER.COM$/$1/g
RULE:[1:$1@$0](^.*@PANEL.COM$)s/^(.*)@PANEL.COM$/$1/g
RULE:[2:$1@$0](^.*@PANEL.COM$)s/^(.*)@PANEL.COM$/$1/g
注意:为了保证对方kdc能够识别并匹配到相应的principal,这里最好将两个集群中我们需要使用到的principal的命名规则都配置上。
5.修改两个集群所有主机的krb5.conf配置文件
在源集群ZETA_RANGER.COM的所有节点的krb5.conf中增加:
[capaths]
ZETA_RANGER.COM = {
PANEL.COM = .
}
在目的集群PANEL.COM的所有节点的krb5.conf中增加:
[capaths]
PANEL.COM = {
ZETA_RANGER.COM = .
}
将[realms]中彼此的域添加到对方的文件中,类似这样:
[realms]
PANEL.COM = {
kdc = cd-hadoop3-1
admin_server = cd-hadoop3-1
}
ZETA_RANGER.COM = {
kdc = sp-dev-1
admin_server = sp-dev-1
}
[domain_realm]增加如下配置,让所有的主机都能被对方kdc识别:
[domain_realm]
.panel.com = PANEL.COM
panel.com = PANEL.COM
.zeta_ranger.com = ZETA_RANGER.COM
zeta_ranger.com = ZETA_RANGER.COM
6.重启两个集群的kdc
service krb5kdc restart
service kadmin restart
7.重启两个集群的hdfs集群和yarn集群
注意: 必须重启yarn,否则提交MR任务会失败
8.查看对方hdfs上的文件目录
hadoop fs -ls hdfs://cd-hadoop3-1:8020
9.向对方hdfs集群上传文件
hadoop fs -put /tmp/test hdfs://cd-hadoop3-1:8020/tmp
10.使用distcp传输数据到对方hdfs集群
hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true -m 30 hdfs://sp-dev-2:8020/tmp/test hdfs://cd-hadoop3-1:8020/tmp
注意:distcp实际上是运行的mr任务,如果向yarn提交任务的用户受权限控制,需要保证提交任务的用户有相应的权限。
————————————————
版权声明:本文为CSDN博主「snail_bing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/snail_bing/article/details/120264129
网友评论