如何通过 Java 或 Scala 在启用 Kerberos 的群集中连接到 HBase

发布于 2021-04-06 20:03:48 字数 3269 浏览 1298 评论 0

本测试需要一个启用了 kerberos 的 HDP 集群。首先,下载 java 样例代码:

$ cd /opt
$ git clone https://github.com/jjmeyer0/hdp-test-examples

创建 keytab

用管理员账号登录 KDC,然后创建叫 webb 的主体,并导出 keytab:

$ kinit root/admin@AMBARI.APACHE.ORG
$ kadmin -q "addprinc webb"         (创建webb主体,需要输入两次密码,密码是1)
$ ktutil
ktutil:  addent -password -p webb -k 1 -e RC4-HMAC
Password for webb@AMBARI.APACHE.ORG: 1
ktutil:  wkt webb.keytab
ktutil:  q
$ scp webb.keytab root@u1403:/etc/security/keytabs/             (把生成的keytab复制到hbase节点)

准备 hbase 用户

回到 hbase 所在的 u1403 节点。webb 用户必须在 HBase 中获得正确的权限。要做到这一点,请执行以下操作:

$ kinit -kt /etc/security/keytabs/hbase.headless.keytab hbase-hdp1   (实测只能用这个主体登录,即使root/admin主体都不行)
$ hbase shell
hbase(main):001:0> grant 'webb','RW'

准备需要的文件

运行例子需要的文件有三个:

  • hbase-site.xml
  • .keytab
  • krb5.conf 由于使用安装 hbase 的节点 u1403 充当运行例子的节点,上述三个文件可以可以直接在本节点上复制:
$ cp /etc/hbase/conf/hbase-site.xml /opt/htp-test-examples/src/main/resources/
$ cp /etc/security/keytabs/webb.keytab /opt/htp-test-examples/src/main/resources/
$ cp /etc/krb5.conf /opt/htp-test-examples/src/main/resources/

对于测试,建议在 hbase-site.xml 中更改 hbase.client.retries.number 属性。默认情况下为35.这在运行某些测试时相当高。

代码运行

例子的java代码位于

src/main/java/com/jj/hbase/HBaseClient.java

在代码中,首先需要做的是创建和加载 HBase 配置:

// Setting up the HBase configuration
Configuration configuration = new Configuration();
configuration.addResource("src/main/resources/hbase-site.xml");

接下来指向krb5.conf文件并设置kerberos主体和keytab。

// Point to the krb5.conf file.
System.setProperty("java.security.krb5.conf", "src/main/resources/krb5.conf");
System.setProperty("sun.security.krb5.debug", "true");

// Override these values by setting -DkerberosPrincipal and/or -DkerberosKeytab
String principal = System.getProperty("kerberosPrincipal", "webb@AMBARI.APACHE.ORG");
String keytabLocation = System.getProperty("kerberosKeytab", "src/main/resources/webb.keytab");

现在使用上面定义的主键和 keytab 登录。

UserGroupInformation.setConfiguration(configuration);
UserGroupInformation.loginUserFromKeytab(principal, keytabLocation)

用 maven 构建:

$ cd /opt/hdp-test-examples
$ mvn clean test -P hdp-2.4.2    (耗时较长)
Tests in error:
  calculatingBuildingAverageShouldProperlyStoreAverage(com.jj.pig.BuildingAvgPigTest): Unable to open iterator for alias building_avg
  makeSureTestDataFromFileProperlyProducesAverage(com.jj.pig.BuildingAvgPigTest): Unable to open iterator for alias building_avg
....
[ERROR] Please refer to /opt/hdp-test-examples/target/surefire-reports for the individual test results.
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.10:test (default-test) on project hdp-test-examples: There are test failures.

Please refer to /opt/hdp-test-examples/target/surefire-reports for the individual test results.
....

这里是 完整代码

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

lorenzathorton8

文章 0 评论 0

Zero

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

mylayout

文章 0 评论 0

tkewei

文章 0 评论 0

17818769742

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文