Java连接HBase(kerberized集群)

栏目: 数据库 · 发布时间: 6年前

内容简介:讲解如何通过 Java 或 Scala 在启用 Kerberos 的群集中连接到 HBase。本测试需要一个启用了kerberos的HDP集群。集群搭建参考

社区原文 “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-test-examples 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ hdp-test-examples ---
[INFO] Deleting /opt/hdp-test-examples/target
[INFO]
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ hdp-test-examples ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 10 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ hdp-test-examples ---
[INFO] Compiling 5 source files to /opt/hdp-test-examples/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ hdp-test-examples ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ hdp-test-examples ---
[INFO] Compiling 1 source file to /opt/hdp-test-examples/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ hdp-test-examples ---
[INFO] Surefire report directory: /opt/hdp-test-examples/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.jj.hbase.HBaseClientTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.552 sec

Results :

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.145s
[INFO] Finished at: Wed Jul 19 07:19:34 UTC 2017
[INFO] Final Memory: 38M/91M
[INFO] ------------------------------------------------------------------------

可以自己读一下单元测试代码 /opt/hdp-test-examples/src/test/java/com/jj/hbase/HBaseClientTest.java 。看上去,代码中它似乎连接上 HBase,然后建表并插入几行数据。

碰到的问题

  • 虚拟机内存不足,将内存由 3G 改成 4G 后问题解决;
  • 构建过程中一些 jar 包下载失败,修改 pom.xml,去掉 Scala相关依赖后问题解决;
  • pig 测试失败,删除 pig 的单元测试目录;
  • 通过 HBase shell 无法进行 grant,改用 hbase-hdp2610 主体并加大虚拟机内存后解决。

这里是 完整代码

Windows下的测试

前文是在 Centos7.3下进行的测试。下面在 Windows下进行测试。毕竟很多人使用 Windows+Eclipse 进行开发。下面的测试并没有直接使用 Eclipse,而是更直接的命令行测试。希望有人能够补充上 Eclipse 下的测试。关于 Eclipse 下的相关配置可以参考 hortonworks 的一篇 社区文章(“Hortonworks Data Platform Artifacts”)

测试使用了git bash命令行工具。git base在 Windows 下模拟的类似 Linux 的命令,但实际上使用的 Windows  操作系统文件。关于 git base 的安装使用参考 这个文档《Ambari 在本地 VM 部署 Hadoop 集群》 。在 git base 上测试通过后,之后又直接在 Windows 命令行下进行了测试。需要说明的是,git bash 和 Windows 使用了不同的环境变量,如PATH。

在 Windows 下需要安装 JDK1.8 和 Maven。Maven是 Java 实现的,所以是所有平台通用的。在 Maven 的 这篇文档(“Maven on Windows”) 中要求 JDK 的安装目录名称不要有空格(如 Program Files 就不行)。Maven被我安装在了  e:\maven 。在 git bash 下运行 Maven 的方法是  /e/maven/bin/mvn

准备代码和配置文件

测试在 Windows 的 e:\opt  目录下进行。以下操作在 git bash 窗口中进行:

$ cd /e/opt
$ git clone https://github.com/wbwangk/hdp-test-examples
$ cd hdp-test-examples
$ scp root@c7302:/etc/krb5.conf src/main/resources/
$ scp root@c7302:/etc/hbase/conf/hbase-site.xml src/main/resources/
$ scp root@c7302:/opt/hdp-test-examples/src/main/resources/jj.keytab src/main/resources/

上述三个 scp 操作时把测试用到3个配置文件从 Linux 下网络复制到了 Windows 下。确保 Windows 的 hosts 文件中定义了3台虚拟机的 IP 和域名。

执行构建和单元测试

$ /e/maven/bin/mvn clean test -P hdp-2.6.1
(省略一些下载信息)
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.jj.hbase.HBaseClientTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.42 sec

Results :

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:27 min
[INFO] Finished at: 2017-07-20T07:40:15+08:00
[INFO] Final Memory: 31M/206M
[INFO] ------------------------------------------------------------------------

直接在Windows命令行下测试

进入 Windows 命令行后:

$ e:
$ cd \opt\hdp-test-examples
E:\opt\hdp-test-examples> mvn clean test -P hdp-2.6.1
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building hdp-test-examples 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ hdp-test-examples ---
[INFO] Deleting E:\opt\hdp-test-examples\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hdp-test-examples ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 10 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hdp-test-examples ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 5 source files to E:\opt\hdp-test-examples\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hdp-test-examples ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ hdp-test-examples ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\opt\hdp-test-examples\target\test-classes
[WARNING] /E:/opt/hdp-test-examples/src/test/java/com/jj/hbase/HBaseClientTest.java: E:\opt\hdp-test-examples\src\test\java\com\jj\hbase\HBaseClientTest.java使用了未经检查或不安全的操作。
[WARNING] /E:/opt/hdp-test-examples/src/test/java/com/jj/hbase/HBaseClientTest.java: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hdp-test-examples ---
[INFO] Surefire report directory: E:\opt\hdp-test-examples\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.jj.hbase.HBaseClientTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.318 sec

Results :

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.624 s
[INFO] Finished at: 2017-07-20T08:15:17+08:00
[INFO] Final Memory: 30M/321M
[INFO] ------------------------------------------------------------------------

以上所述就是小编给大家介绍的《Java连接HBase(kerberized集群)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C陷阱与缺陷

C陷阱与缺陷

凯尼格 / 高巍 / 人民邮电出版社 / 2008-2-1 / 30.00元

作者以自己1985年在Bell实验室时发表的一篇论文为基础,结合自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作。写作本书的出发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。.. 全书分为8章,分别从词法分析、语法语义、连接、库函数、预处理器、可移植性缺陷等几个方面分析了C编程中可能遇到的问题。最后,作者用一章的篇幅给出了若干具有实用价值的建议。.. 本书......一起来看看 《C陷阱与缺陷》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码