HBase实操 | 如何使用Java连接Kerberos的HBase

网友投稿 1168 2022-10-14

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

HBase实操 | 如何使用Java连接Kerberos的HBase

1文档编写目的

出于CDH集群安全考虑,在CDH集群中增加了Kerberos认证机制。因为HBase的存储系统是基于Hadoop的存储,所以通过HBase客户端访问HBase数据库时需要进行身份认证。在Linux下使用HBase客户端访问HBase数据时需要先kinit初始化Kerberos账号,认证完成后我们就可以直接使用HBase shell操作HBase了。通过Linux的Kinit命令可以方便的完成Kerberos的认证,那么在Java开发中如何完成Kerberos的登录认证呢?本篇文章主要讲述如何使用Java连接Kerberos环境的HBase。

内容概述

1.环境准备

2.创建Java Maven工程

3.编写HBase测试代码

4.测试

5.总结

测试环境

1.RedHat7.2

2.CM和CDH版本为5.11.2

前置条件

1.Intellij已安装且正常运行

2.Maven环境正常

2环境准备

1.从CDH集群下载HBase客户端配置

2.krb5.conf配置(直接使用CDH集群的Kerberos配置)

#Configuration snippets may be placed in this directory as wellincludedir /etc/krb5.conf.d/[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server=FILE:/var/log/kadmind.log[libdefaults] dns_lookup_realm = false ticket_lifetime= 24h renew_lifetime= 7d forwardable= true rdns = false default_realm=CLOUDERA.COM #default_ccache_name =KEYRING:persistent:%{uid}[realms] CLOUDERA.COM = {  kdc =ip-172-31-22-86.ap-southeast-1.compute.internal  admin_server=ip-172-31-22-86.ap-southeast-1.compute.internal }[domain_realm] ip-172-31-22-86.ap-southeast-1.compute.internal=CLOUDERA.COM ip-172-31-22-86.ap-southeast-1.compute.internal=CLOUDERA.COM

3.获取Kerberos的keytab文件

使用kadmin为Kerberos账号生成keytab,fayson.keytab文件生成在当前目录下。

[ec2-user@ip-172-31-22-86 ~]$ sudo kadmin.localAuthenticating as principal hdfs/admin@CLOUDERA.COM with password.kadmin.local:  xst -norandkey -k fayson.keytab fayson@CLOUDERA.COM    ...kadmin.local:  exit

4.在当前开发环境下配置集群的主机信息到hosts文件

Windows在C:\Windows\System32\drivers\etc\hosts文件中添加

5.为fayson用户授权HBase库的访问权限

在命令行使用kinit初始化hbase的Kerberos账号

[root@ip-172-31-26-80 process]# cd 1699-hbase-REGIONSERVER[root@ip-172-31-26-80 1699-hbase-REGIONSERVER]# pwd/var/run/cloudera-scm-agent/process/1699-hbase-REGIONSERVER[root@ip-172-31-26-80 1699-hbase-REGIONSERVER]# kinit -kt hbase.keytab hbase/ip-172-31-26-80.ap-southeast-1.compute.internal@CLOUDERA.COM[root@ip-172-31-26-80 1699-hbase-REGIONSERVER]# klistTicket cache:FILE:/tmp/krb5cc_0Default principal:hbase/ip-172-31-26-80.ap-southeast-1.compute.internal@CLOUDERA.COMValid starting       Expires              Service principal10/25/2017 11:13:21  10/26/2017 11:13:21  krbtgt/CLOUDERA.COM@CLOUDERA.COM        renew until 10/30/2017 11:13:21

使用hbase shell登录客户端对fayson用户赋权

[root@ip-172-31-26-80 1699-hbase-REGIONSERVER]# hbase shell17/10/25 11:16:01 INFO Configuration.deprecation: hadoop.native.lib isdeprecated. Instead, use io.native.lib.availableHBase Shell; enter'help'for list of supported commands.Type "exit" to leave the HBase ShellVersion 1.2.0-cdh5.11.2, rUnknown, Fri Aug 18 14:09:37 PDT 2017hbase(main):001:0>grant 'fayson', 'RWC'0 row(s) in 0.4110 seconds

3创建Java工程

1.使用Intellij创建Java Maven工程

2.在工程下创建kerberos-conf目录,将下载的客户端配置文件拷贝至此目录

注意目录颜色变化

3.在pom.xml配置文件中增加HBase的Maven依赖

  org.apache.hadoop  hadoop-client  2.6.5  org.apache.hadoop  hadoop-common  2.6.5  org.apache.hbase  hbase-client  1.2.0

4编写HBase测试代码

1.HBaseSample.java类调用API接口访问HBase示例代码

package com.cloudera;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.client.*;import org.apache.hadoop.security.UserGroupInformation;import java.io.IOException;/** * Java访问Kerberos环境的HBase数据库 * @Date 2107-10-25 22:22:58 */publicclass App {    public static void main( String[] args ) {        System.setProperty("java.security.krb5.conf", "c:\\keytab\krb5.conf");        Configuration configuration = HBaseConfiguration.create();        System.out.println(configuration.get("hbase.rootdir"));        configuration.set("hadoop.security.authentication", "Kerberos" );        UserGroupInformation. setConfiguration(configuration);        try {            UserGroupInformation.loginUserFromKeytab("fayson@CLOUDERA.COM", "c:\\keytab\fayson.keytab");            Connection connection = ConnectionFactory.createConnection(configuration);            Table table = connection.getTable(TableName.valueOf("picHbase"));            System.out.println(table.getName());            Scan scan = new Scan();            ResultScanner rs = table.getScanner(scan);            for (Result r : rs) {                System. out.println(r.toString());            }        } catch (IOException e) {            e.printStackTrace();        }    }}

5测试

1.运行代码测试

2.测试结果

6总结

在开发环境下通过Java代码直接连接到Kerberos环境下的HBase时,则需要将krb5.conf配置加载到程序运行环境中。

在使用Kerberos账号进登录行认证时,如果使用的是普通账号(fayson),则需要为fayson账号授权,否则fayson用户无权限访问HBase库的表。

参考文档:

http://hbase.apache.org/book.html#hbase.secure.configuration

上一篇:加速国产开源软件创新,云智慧AIOps社区正式发布
下一篇:解放运维的双手,谈自动化运维管理平台设计
相关文章

 发表评论

暂时没有评论,来抢沙发吧~