专栏首页Hadoop实操如何使用Java连接Kerberos的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 well

includedir /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.local

Authenticating as principal hdfs/admin@CLOUDERA.COM with password.

kadmin.local: xst -norandkey -k fayson.keytab fayson@CLOUDERA.COM

...

kadmin.local: exit

ec2-user@ip-172-31-22-86 ~$

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# klist

Ticket cache:FILE:/tmp/krb5cc_0

Default principal:hbase/ip-172-31-26-80.ap-southeast-1.compute.internal@CLOUDERA.COM

Valid starting Expires Service principal

10/25/2017 11:13:21 10/26/2017 11:13:21 krbtgt/CLOUDERA.COM@CLOUDERA.COM

renew until 10/30/2017 11:13:21

root@ip-172-31-26-80 1699-hbase-REGIONSERVER#

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

root@ip-172-31-26-80 1699-hbase-REGIONSERVER# hbase shell

17/10/25 11:16:01 INFO Configuration.deprecation: hadoop.native.lib isdeprecated. Instead, use io.native.lib.available

HBase Shell; enter'help<RETURN>'for list of supported commands.

Type "exit<RETURN>" to leave the HBase Shell

Version 1.2.0-cdh5.11.2, rUnknown, Fri Aug 18 14:09:37 PDT 2017

hbase(main):001:0>grant 'fayson', 'RWC'

0 row(s) in 0.4110 seconds

hbase(main):002:0>

3.创建Java工程


1.使用Intellij创建Java Maven工程

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

点击右键将Kerberos-conf目录标记为Sources Root

注意目录颜色变化

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

<dependency>

<groupId>org.apache.hadoop</groupId>

<artifactId>hadoop-client</artifactId>

<version>2.6.5</version>

</dependency>

<dependency>

<groupId>org.apache.hadoop</groupId>

<artifactId>hadoop-common</artifactId>

<version>2.6.5</version>

</dependency>

<dependency>

<groupId>org.apache.hbase</groupId>

<artifactId>hbase-client</artifactId>

<version>1.2.0</version>

</dependency>

4.编写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

醉酒鞭名马,少年多浮夸! 岭南浣溪沙,呕吐酒肆下!挚友不肯放,数据玩的花! 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。


推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

本文分享自微信公众号 - Hadoop实操(gh_c4c535955d0f),作者:Fayson

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在CDH中使用Phoenix

    昨天我们简单介绍了一下Apache Phoenix,请参考Cloudera Labs中的Phoenix。今天我们主要讲述如何在CDH中安装配置Phoenix,并...

    Fayson
  • 0674-5.16.2-如何在CDH5中使用Phoenix4.14.1

    Apache Phoenix是Apache HBase上一个高效的SQL引擎,很多公司都在使用它,比如Salesforce,它开源了这个项目,并将该项目贡献到社...

    Fayson
  • 0725-5.16.2-如何卸载CDH5.16.2

    Fayson在两年前的文章中介绍过CDH的卸载,参考《0008-如何卸载CDH(附一键卸载github源码)V1.2》,《0609-6.1.0-如何卸载CDH6...

    Fayson
  • GitBlit服务器团队协作方式

    程序手艺人
  • 腾讯云 AMD CPU云服务器_业界领先性价比_限时特价 - 腾讯云优惠

    国内首家采用 AMD EPYC™霄龙处理器的实例,提供平衡的计算、内存和网络资源,是多种应用程序的最佳选择。 具有超高性价比,确保您的工作负载获得业界领先的性价...

    用户5893761
  • 4.如何为Hive集成RedHat7的OpenLDAP认证

    温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproje...

    Fayson
  • AI换脸ZAO一晚,成本烧掉几百万

    8月30日上午10点半左右,正在使用ZAO的用户发现,想要生成一段新的AI换脸视频,已经不是等待几秒、排队第几位的问题,而是——

    刀刀老高
  • 为什么车厂能造呼吸机?

    2月底中国-世卫组织新冠肺炎联合调查报告显示,新冠病毒感染的重症率为13.8%,也就是平均每7.3个感染者中会有1人发展为重症患者,出现呼吸困难。而医用呼吸机成...

    脑极体
  • python3——print使用

    py3study
  • AI会抢夺修图师的工作吗?

    作为一名业余摄影爱好者,在发图之前通常会使用软件处理一下,也就是俗称的 P 图。如果时间比较紧张、或者不重要的图,不会花费多长时间,加个滤镜,调一下色调,几十秒...

    云水木石

扫码关注云+社区

领取腾讯云代金券