gpt4 book ai didi

java - 从同一个进程访问两个安全的 (Kerberos) Hadoop/HBase 集群

转载 作者:可可西里 更新时间:2023-11-01 16:42:21 24 4
gpt4 key购买 nike

我有一个 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 身份验证集群之间复制数据。

我使用以下代码登录到一个集群,使用 key 表文件:

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");

然后我无法再从 ClusterB 加载,因为我已登录到 ClusterA。像“tableB.get(...)”这样的调用会挂起。

那么如何访问具有不同身份验证的两个不同集群?

最佳答案

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

关于java - 从同一个进程访问两个安全的 (Kerberos) Hadoop/HBase 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39648106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com