繁体   English   中英

从同一过程访问两个安全(Kerberos)Hadoop / HBase群集

[英]Access two secured (Kerberos) Hadoop / HBase clusters from the same process

我有一个Java工具,可将几行数据从一个HBase群集复制到另一个(称为ClusterA和ClusterB)。 当两个群集都不安全时,此方法工作正常:

Configuration configA = Utilities.makeHBaseConfig("configA.xml");
Configuration configB = Utilities.makeHBaseConfig("configB.xml");
HTable tableA = new HTable(configA, input_table);
HTable tableB = new HTable(configB, output_table);
tableA.get(...)
tableB.put(...)

注意:Utilities.makeHBaseConfig()方法从配置文件加载Zookeeper仲裁设置。

现在,我正在尝试从一个不安全的群集到一个安全的群集。 不久,不安全的群集将升级到Kerberos身份验证,因此我将需要在两个不同的Kerberos身份验证的群集之间复制数据。

我使用以下代码通过keytab文件登录到一个集群:

Configuration configA = Utilities.makeHBaseConfig("configA.xml");
File keyTab = new File(keytab_path).getCanonicalPath();
configA.set(HBASE_KEY_TAB_FILE_KEY, keyTab);
configA.set(HADOOP_SECURITY_AUTHORIZATION, "true");
configA.set(HADOOP_SECURITY_AUTHENTICATION, "Kerberos");
UserGroupInformation.setConfiguration(configA);
UserGroupInformation.loginUserFromKeytab(user, keyTab);

这仅适用于仅在一个群集上进行的操作。 但是,setConfiguration()和loginUserFromKeytab()是静态方法。 如果我创建第二个配置对象configB来访问ClusterB,如下所示:

Configuration configB = Utilities.makeHBaseConfig("configB.xml");

然后,由于我已登录ClusterA,因此不再能够从ClusterB加载。 像“ tableB.get(...)”这样的调用只是挂起。

那么,如何使用不同的身份验证访问两个不同的群集?

如果两个2个群集使用相同的KDC,则可以尝试为两个群集使用相同的Kerberos主体用户名和域/领域。 然后,单个keyTab文件对两个群集均有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM