设为首页 加入收藏

TOP

Java连接HBase(kerberized集群)(一)
2018-08-09 09:13:13 】 浏览:48
Tags:Java 连接 HBase kerberized 集群

社区原文 “Connecting to HBase in a Kerberos Enabled Cluster”

讲解如何通过 Java 或 Scala 在启用 Kerberos 的群集中连接到 HBase。
本测试需要一个启用了kerberos的HDP集群。集群搭建参考《Ambari在本地VM(centos7.3)部署hadoop集群》。本测试在HDP集群的C7302节点(centos7.3)上进行。首先,下载java样例代码:

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

这个github库是从jjmeyer0/hdp-test-examples库fork的。主要修改有:

  1. 修改了 pom.xml 文件:增加了对 HDP2.6.1 的支持;去掉了 Scala 相关依赖,因为会导致构建失败
  2. 修改了 src/main/java/com/jj/hbase/HBaseClient.java 中 jj 用户主体为 jj@AMBAR.APACHE.ORGI

创建keytab

在 c7302 节点用管理员账号登录 KDC,然后创建叫jj的主体,并导出 keytab:

$ kinit root/admin@AMBARI.APACHE.ORG
$ kadmin -q "addprinc jj"         (创建jj主体,需要输入两次密码,密码是1)
$ ktutil
ktutil:  addent -password -p jj -k 1 -e RC4-HMAC
Password for jj@AMBARI.APACHE.ORG: 1
ktutil:  wkt jj.keytab                              (生成了keytab文件)
ktutil:  q
$ scp jj.keytab /opt/hdp-test-examples/src/main/resources

准备HBase用户

jj 用户必须在 HBase 中获得正确的权限。Ambari 为 HBase创建一个管理员用户,通过 keytab 查找管理员用户主体。并利用它登录,利用密钥文件登录不需要密码:

$ klist -kt /etc/security/keytabs/hbase.headless.keytab           (查看hbase服务的printcipal )
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   1 07/06/2017 03:53:35 hbase-hdp2610@AMBARI.APACHE.ORG
$ kinit -kt /etc/security/keytabs/hbase.headless.keytab hbase-hdp2610              (实测只能用这个主体登录,即使root/admin主体都不行)
$ hbase shell
hbase(main):001:0> grant 'jj','RW'

准备配置文件

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

  • hbase-site.xml
  • .keytab
  • krb5.conf   前文已经复制了jj.keytab,现在要复制另外两个。

由于使用HDP集群的节点充当客户机,所以直接在本节点复制文件即可:

$ scp /etc/hbase/conf/hbase-site.xml /opt/htp-test-examples/src/main/resources/
$ scp /etc/krb5.conf /opt/htp-test-examples/src/main/resources/

对于测试,建议在 hbase-site.xml 中更改 “hbase.client.retries.number” 属性。默认情况下为35。这个“重试次数”这在运行测试时太大了,复制后可以修改为3。

其它修改

目录/opt/hdp-test-examples/src`下有两个目录:`main`和`test`。`main`目录放置客户端程序,而`test`目录是单元测试目录。 来到目录`/opt/hdp-test-examples/src/test/java/com/jj下看看,发现除了hbase还有个pig目录。如果只是测试java客户端连接hbase,建议删除pig目录。否则在maven构建是也会执行pig的单元测试,而由于没有正确配置pig,导致必然出错使构建失败。

代码讲解

例子的 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", "jj@AMBARI.APACHE.ORG");
String keytabLocation = System.getProperty("kerberosKeytab", "src/main/resources/jj.keytab");

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

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

Maven构建、测试

$ cd /opt/hdp-test-examples
$ mvn clean test -P hdp-2.6.1    (如果网络差则耗时较长)
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building hdp
编程开发网
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇JDK源码阅读:InterruptibleChann.. 下一篇Java结合keytool实现非对称加密和..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

C 语言

C++基础

windows编程基础

linux编程基础

C/C++面试题目