美文网首页
java连接开启kerberos的hbase踩坑记录

java连接开启kerberos的hbase踩坑记录

作者: 一生爱漂泊 | 来源:发表于2019-12-26 23:36 被阅读0次

因为不懂kerberos,当然到现在也不懂,遇到的几点坑,分享一下,有问题欢迎大家纠正

两点坑

conf.set("kerberos.principal" ,"hbase/_HOST@AC1.HBASE.COM" );

conf.set("hbase.master.kerberos.principal","hbase/_HOST@AC1.HBASE.COM");

conf.set("hbase.regionserver.kerberos.principal","hbase/_HOST@AC1.HBASE.COM");

这三个参数需要设置为 hbase配置文件中的hbase.master.kerberos.principal的配置,例如下图

取这个参数才能运行

第二点UserGroupInformation.loginUserFromKeytab中的user是你hbase数据库里面的用户名,与上面的principal不是一样的,记住不是一样的格式

附一段代码 开箱即用 有问题欢迎留言 准备攻克一下 这个kerberos 有点意思

public class App

{

private static Configurationconf =null;

static Connectionconn =null;

static {

// 这个配置文件主要是记录 kerberos的相关配置信息,例如KDC是哪个IP?默认的realm是哪个?

// 如果没有这个配置文件这边认证的时候肯定不知道KDC的路径喽

// 这个文件也是从远程服务器上copy下来的

        System.setProperty("java.security.krb5.conf","记住是conf文件的绝对路径" );

conf = HBaseConfiguration.create();

conf.set("hadoop.security.authentication" ,"Kerberos" );

// 这个hbase.keytab也是从远程服务器上copy下来的, 里面存储的是密码相关信息

// 这样我们就不需要交互式输入密码了

        conf.set("keytab.file" ,"keytab文件的绝对路径" );

conf.set("kerberos.principal" ,"hbase配置文件中的hbase.master.kerberos.principal" );

conf.set("hbase.master.kerberos.principal","hbase配置文件中的hbase.master.kerberos.principal");

conf.set("hbase.regionserver.kerberos.principal","hbase配置文件中的hbase.master.kerberos.principal");

conf.set("hbase.zookeeper.quorum",zookeeper地址 可以一个可以多个);

conf.set("hbase.zookeeper.property.clientPort",zookeeper端口);

conf.set("hbase.security.authentication","kerberos");

//存储hbase节点元数据的zookeeper节点,默认是/hbase/meta-region-server,但是也要根据具体的环境确认下,例如我们的这个环境,节点信息是存储在 /hbase-secure/meta-region-server

conf.set("zookeeper.znode.parent","/hbase-secure");

UserGroupInformation.setConfiguration(conf);

try {

UserGroupInformation.loginUserFromKeytab("数据库用户名","keytab文件的绝对路径" );

}catch (IOException e) {

e.printStackTrace();

}

try {

conn=ConnectionFactory.createConnection(conf);

}catch (IOException e) {

e.printStackTrace();

}

}

public static Boolean scanSpan(final String tableName)throws Exception {

Table table =conn.getTable(TableName.valueOf("表名"));

Put put=new Put(Bytes.toBytes(new String("test_authority2222")));

put.addColumn(Bytes.toBytes("fm1"),

Bytes.toBytes("user_id"),

Bytes.toBytes("0000000000000000")

);

table.put(put);

table.close();

return  false;

}

public static void main( String[] args )

{

try {

System.out.println(scanSpan(""));

}catch (Exception e) {

e.printStackTrace();

}finally {

try {

conn.close();

}catch (IOException e) {

e.printStackTrace();

}

}

System.out.println("Hello World!" );

}

相关文章

网友评论

      本文标题:java连接开启kerberos的hbase踩坑记录

      本文链接:https://www.haomeiwen.com/subject/lbhroctx.html