天天看点

java API 访问带有Kerberos认证的HBase时window服务器的配置

首先第一步,是确定的代码运行在window服务器还是linux服务器下, 如果是window服务器下,首先要检测window服务器是否可以连接的通 hadoop平台的zk (2181端口) (telnet xxx.xxx.xxx.xxx 2181)确定连接无误的情况下,进行连接hbase服务器的验证操作(60020端口) (telnet xxx.xxx.xxx.xxx 60020)两者都通的话。下一步就是去的认证了。

首先,安装Kerberos客户端 , 安装windows版本的Kerberos客户端(链接:http://pan.baidu.com/s/1pLdIA5l 密码:e82j) ,然后进行创建配置文件 -- krb5.ini。

第三步 配置window服务器的系统环境变量

如 KRB5_CONFIG=d:\krb5.ini

最后就是 初始化 Kerberos 证书,keytab文件从hadoop服务器端可以下载到XXX.keytab

(kinit.exe –kt xxx.keytab [email protected])

再次出现401则需要重新执行kinit命令 (Kerberos证书24小时超时)

之后就可以写个demo测试一下啦~

附demo代码:

//这一行在window服务器下必须要加,否则读取不到配置文件

System. setProperty("java.security.krb5.conf", krb5.ini文件的window下的路径 )

config = HBaseConfiguration.create();

//其中这些xml的配置文件来自于hbase服务器的配置文件,将他们拷下来放在相应的目录下在代码里

指定他们的路径

config.addResource("E:\\HbaseConf\\hbase-site.xml");

config.addResource("E:\\HbaseConf\\core-site.xml");

config.addResource("E:\\HbaseConf\\hdfs-site.xml");

config.addResource("E:\\HbaseConf\\ssl-clinet.xml");

UserGroupInformation.setConfiguration(config);

try{

UserGroupInformation.loginUserFromKeytab("xxx", "C:\\xxx.keytab" );

htable = new HTable(config, "表名");

Put put = new Put(Bytes.toBytes("TESTROW0004"));

put.setWriteToWAL(false);

put.add(Bytes.toBytes("INFO"), Bytes.toBytes("TESTCOLUMN"),

Bytes.toBytes("TESTVALUES0004") );

htable.put(put);

Scan scan = new Scan();

scan.addFamily(Bytes.toBytes("INFO"));

ResultScanner rs = htable.getScanner(scan);

for (Result r : rs) {

String rowkey = Bytes.toString(r.getRow());

String rowvalues = Bytes.toString( r.getValue( Bytes.toBytes("INFO"),

Bytes.toBytes( "TESTCOLUMN")) );

System.out.println("== rowkey :"+ rowkey +" rowvalues :" +rowvalues);

}

} catch (IOException e) {

e.printStackTrace();

} finally{

if( htable != null ) htable.close();

}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

Windows配置kerberos:

  1. 下载4.1版本的kerberos客户端。下载地址

http://web.mit.edu/kerberos/dist/index.html

安装直接next

  1. 修改kerberos的keb5.ini文件,一般都在C:\ProgramData\MIT\Kerberos5
  1. 修改环境变量中的path路径

如果kerberos的环境变量在后面的话,其他的软件的指令里面也带了一些 kinit, ktab, klist 等软件,所以输入 kinit 、klist 的时候执行的是其他软件的指令。所以最好把kerberos放最前面!

重中之重:改完之后一定要重启电脑!!!

  1. 之后再cmd中输入登录指令

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

Linux配置kerberos:

最近需要给hadoop集群加上安全验证,采用kerberos作为认证,这里记录一下安装kerberos kdc的经验

服务器centos6.7,采用在线yum安装的方式

1、使用yum install krb5-libs krb5-server krb5-workstation 进行安装,遇到是/否一律选择是

java API 访问带有Kerberos认证的HBase时window服务器的配置

2、等待安装完成,开始进行配置,首先配置/etc/krb5.conf文件,其中特别要配置的为default_realm,这里为自定义的一个领域(可以理解为域名),注意一定要大写如TEST.COM/TEST,下面花括号外面值和default-realm一样。话括号里为配置kdc和admin的主机名,这里配置为同一台主机即当前主机名,如果kdc有多台的话,也可以配置多个kdc=xxx

java API 访问带有Kerberos认证的HBase时window服务器的配置

3、配置/var/kerberos/krb5kdc/kdc.conf和/var/kerberos/krb5kdc/kadm5.acl文件,其中kadm5.acl表示kadmin管理帐号为*/[email protected]_EALM的,即所有带/admin都为可以是管理帐号

java API 访问带有Kerberos认证的HBase时window服务器的配置
java API 访问带有Kerberos认证的HBase时window服务器的配置

4、创建kerberos数据库,

4-1首先创建前看到/var/kerberos/krb5kdc/仅用两个文件

java API 访问带有Kerberos认证的HBase时window服务器的配置

4-2创建数据库,使用命令kdb5_util create -r your_realm -s,注意,在Loading random data这里的时候可能会要比较久的时间

[[email protected] ~]# kdb5_util create -r TEST.COM -s

Loading random data

Initializing database '/var/kerberos/krb5kdc/principal' for realm 'TEST.COM',

master key name 'K/[email protected]'

You will be prompted for the database Master Password.

It is important that you NOT FORGET this password.

Enter KDC database master key:

Re-enter KDC database master key to verify:

[[email protected] ~]#

5、创建完毕后,在查看/var/kerberos/krb5kdc/下面发现已经多了几个principal相关的文件,其实这些就是kerberos的数据文件。而如果把这个文件删除就相当于把数据库删除需要重建,可以把这些文件mv走然后kadmin.local试试,应该是会报错的,然后再把这些文件mv回来。又可以了

java API 访问带有Kerberos认证的HBase时window服务器的配置

6、创建管理员并输入密码(帐号admin/admin(一定要带xxx/admin) 密码一定要记住)

[[email protected] ~]# /usr/sbin/kadmin.local -q "addprinc admin/admin"

Authenticating as principal root/[email protected] with password.

WARNING: no policy specified for admin/[email protected]; defaulting to no policy

Enter password for principal "admin/[email protected]":

Re-enter password for principal "admin/[email protected]":

Principal "admin/[email protected]" created.

7、设置kadmin和k5bdkdc服务开机启动(一个kdc的服务一个kadmin管理服务)

java API 访问带有Kerberos认证的HBase时window服务器的配置

8、验证通过admin登录

java API 访问带有Kerberos认证的HBase时window服务器的配置

9、添加一个test帐号并且查看是否进入数据库(通过kadmin.local 然后listprincs查看)

java API 访问带有Kerberos认证的HBase时window服务器的配置

以上已经安装成功,接下来将在cdh hadoop集群上开启kerberos管理、

参考http://web.mit.edu/kerberos/krb5-latest/doc/index.html