E-MapReduce中的Kerberos支持跨域访问(cross-realm),即不同的Kerberos集群之间可以互相访问。

下面以Cluster-A跨域去访问Cluster-B中的服务为例:

  • Cluster-A的emr-header-1的hostname -> emr-header-1.cluster-1234 ; realm -> EMR.1234.COM。
  • Cluster-B的emr-header-1的hostname -> emr-header-1.cluster-6789 ; realm -> EMR.6789.COM。
  • 说明
    • hostname可以在emr-header-1上面执行命令hostname获取。
    • realm可以在emr-header-1上面的/etc/krb5.conf获取。

添加 principal

Cluster-A和Cluster-B两个集群的emr-header-1节点分别执行以下完全一样的命令。

# root账号
       sh /usr/lib/has-current/bin/hadmin-local.sh /etc/ecm/has-conf -k /etc/ecm/has-conf/admin.keytab
       HadminLocalTool.local: addprinc -pw 123456 krbtgt/EMR.6789.COM@EMR.1234.COM
说明
  • 123456是初始密码,可自行修改。
  • EMR.6789.COM是Cluster-B的realm,即被访问的集群的realm。
  • EMR.1234.COM是Cluster-A的realm,即发起访问的集群realm。

配置 Cluster-A 的 /etc/krb5.conf

在Cluster-A集群上配置 [realms]/[domain_realm]/[capaths],如下所示。

[libdefaults]
    kdc_realm = EMR.1234.COM
    default_realm = EMR.1234.COM
    udp_preference_limit = 4096
    kdc_tcp_port = 88
    kdc_udp_port = 88
    dns_lookup_kdc = false
[realms]
    EMR.1234.COM = {
                kdc = 10.81.49.3:88
    }
    EMR.6789.COM = {
                kdc = 10.81.49.7:88
    }
[domain_realm]
    .cluster-1234 = EMR.1234.COM
    .cluster-6789 = EMR.6789.COM
[capaths]
    EMR.1234.COM = {
       EMR.6789.COM = .
    }
    EMR.6789.COM = {
       EMR.1234.COM = .
    }

将上述/etc/krb5.conf同步到Cluster-A所有节点。

将Cluster-B节点的/etc/hosts文件中绑定信息(只需要长域名emr-xxx-x.cluster-xxx)拷贝到Cluster-A的所有节点 /etc/hosts

10.81.45.89  emr-worker-1.cluster-xxx
 10.81.46.222  emr-worker-2.cluster-xx
 10.81.44.177  emr-header-1.cluster-xxx
说明
  • Cluster-A上面如果要跑作业访问Cluster-B,需要先重启yarn。
  • Cluster-A的所有节点配置Cluster-B的host绑定信息。

访问Cluster-B服务

在Cluster-A上面可以用Cluster-A的Kerberos的keytab文件/ticket缓存,去访问Cluster-B的服务。

如访问Cluster-B的hdfs服务。

su has;
hadoop fs -ls hdfs://emr-header-1.cluster-6789:9000/
Found 4 items
-rw-r-----   2 has    hadoop         34 2017-12-05 18:15 hdfs://emr-header-1.cluster-6789:9000/abc
drwxrwxrwt   - hadoop hadoop          0 2017-12-05 18:32 hdfs://emr-header-1.cluster-6789:9000/spark-history
drwxrwxrwt   - hadoop hadoop          0 2017-12-05 17:53 hdfs://emr-header-1.cluster-6789:9000/tmp
drwxrwxrwt   - hadoop hadoop          0 2017-12-05 18:24 hdfs://emr-header-1.cluster-6789:9000/user