关于星环TDH产品的Java通过Kerberos安全认证连接hyperbase

Posted Fudge'

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于星环TDH产品的Java通过Kerberos安全认证连接hyperbase相关的知识,希望对你有一定的参考价值。

博主是Java实习生最近在做关于星环大数据方面的工作,碰到一些问题,费了很大的劲才搞通,记录一下,希望可以帮到大家.

Kerberos 术语

  • Kerberos 中有以下一些概念需要了解:
    1)KDC(Key Distribute Center):密钥分发中心,负责存储用户信息,管理发放票据。
    2)Realm:Kerberos 所管理的一个领域或范围,称之为一个 Realm。
    3)Principal:Kerberos 所管理的一个用户或者一个服务,可以理解为 Kerberos 中保存的一个账号, 其格式通常如下:primary/instance@realm
    4)keytab:Kerberos 中的用户认证,可通过密码或者密钥文件证明身份,keytab 指密钥文件。

话不多说先上代码

import com.google.protobuf.ServiceException;
import org.apache.commons.codec.DecoderException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.shaded.org.apache.zookeeper.Op;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.security.UserGroupInformation;
import org.mortbay.log.Log;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
//下载
public class hyperbase 
    private static Connection conn;
    private static final String ZK_QUORUM = "hbase.zookeeper.quorum";
    private static final String ZK_CLIENT_PORT = "hbase.zookeeper.property.clientPort";
    private static final String ZK_POS = "172.16.180.57:2181,172.16.180.58:2181,172.16.180.59:2181";
    private static final String ZK_PORT_VALUE = "2181";
    private static Configuration conf;

    public static void main(String[] args) throws IOException, ServiceException, DecoderException 
        System.setProperty("java.security.krb5.conf", "E:\\\\TDH-Client\\\\kerberos\\\\krb5.conf");
        System.setProperty("java.security.auth.login.config", "E:\\\\TDH-Client\\\\conf\\\\hyperbase1\\\\jaas.conf");
        conf = HBaseConfiguration.create();
        conf.addResource(new Path("E:\\\\TDH-Client\\\\conf\\\\hyperbase1\\\\hbase-site.xml"));
        conf.addResource(new Path("E:\\\\TDH-Client\\\\conf\\\\hdfs1\\\\hdfs-site.xml"));
        conf.addResource(new Path("E:\\\\TDH-Client\\\\conf\\\\hdfs1\\\\core-site.xml"));
        conf.set(ZK_QUORUM, ZK_POS);
        conf.set(ZK_CLIENT_PORT, ZK_PORT_VALUE);
        conf.set("hadoop.security.authentication", "kerberos");
        UserGroupInformation.setConfiguration(conf);
        UserGroupInformation.loginUserFromKeytab("hbase/tdh01@TDH","E:\\\\TDH-Client\\\\kerberos\\\\hyperbase.keytab");
        // //创建连接池
        try 
            conn = ConnectionFactory.createConnection(conf);
         catch (Exception e) 
            e.printStackTrace();
        
        scanData("1314.txt");

//        HBaseAdmin.checkHBaseAvailable(conf);
//        Admin admin = conn.getAdmin();
//        HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("forpoc"));
        // 给表描述对象增加列族
//        tableDescriptor.addFamily(new HColumnDescriptor("cf"));
//       admin.createTable(tableDescriptor);
//       conn.close();
    

    public static void scanData(String tableName) throws IOException, DecoderException 

        HTable table = (HTable) conn.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();
        ResultScanner resultScanner = table.getScanner(scan);
        for (Result result : resultScanner) 
            for (Cell cell : result.rawCells()) 
                String row = new String(CellUtil.cloneRow(cell));
                String family = new String(CellUtil.cloneFamily(cell));
                String Qualifier = new String(CellUtil.cloneQualifier(cell));
                String value = new String(CellUtil.cloneValue(cell));
                System.out.println("row: " + row + " family: " + family + " Qualifier: "+Qualifier +" value: " + value);
            
            System.out.println("----------------------");
        
        table.close();
        conn.close();
    

上面代码是下载,下载成功了会在控制台出现下载文本

首先,如果要运行上面的东西,你需要去星环所在服务器上自己下载jar包依赖,并且还要自己去星环平台下载他们的客户端到自己主机,不然会找不到认证文件

https://kb.transwarp.cn/posts/4005

这个是星环的官方文档,也可以按照他的配,实现他的前提是要你的客户端开启Kerberos认证的,还要注意每次关闭和开启都要重新下载hyperbase.Kerberos文件

1.这个Principal是你的用户名,你要核对用户名对不对,不要犯低级错误

2.要查看集群时间和你主机时间是否一致,不一致的话会导致连接失败.

当然,也可以自己试一下上传文件,创建表格等方式,在上传完了可以去服务器检验

图中

kinit hbase/$(hostname) -kt /etc/hyperbase1/conf/hyperbase.keytab

是认证命令,需要开始Kerberos认证才能去访问hbase表.

当出现你创建的表格和列簇就说明创建成功了,如果上面有什么说的不对的问题请多多指教,谢谢!

以上是关于关于星环TDH产品的Java通过Kerberos安全认证连接hyperbase的主要内容,如果未能解决你的问题,请参考以下文章

星环科技最新发布一站式Hadoop发行版 TDH4.0

TDH 8.0 使用必读 1 :为什么你需要存算解耦的多模型数据管理平台

让SQL用户装上hadoop大数据的引擎,星环科技TDH4.1最新发布

星环大数据组件hyperbase在hdfs上的目录结构分析

TDH大数据平台的卸载与重装

TDH 集群的许可证管理机制及TDH集群的卸载与安装