java Hbase API + kerberos windows与linux端代码

这段代码展示了如何在Windows和Linux环境下使用Java创建一个通用的HBase连接工具类`HBaseUtils`,该类加载核心、HDFS和HBase的配置文件,并通过Kerberos认证进行登录。在Windows端,配置文件和keytab路径为本地资源目录,而在Linux端,它们是系统路径。代码还在两个平台上分别展示了如何使用这个工具类进行实际的HBase表操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先附上windows和linux环境下通用的工具类

public class HBaseUtils {

    public static Connection getHBaseConn(String confDirPath, String principal, String keytabPath) throws Exception {
        Configuration configuration = HBaseConfiguration.create();
        File coreFile = new File(confDirPath + File.separator + "core-site.xml");
        if (!coreFile.exists()) {
            InputStream inStream = HBaseUtils.class.getClassLoader().getResourceAsStream("core-site.xml");
            configuration.addResource(inStream);
        } else {
            configuration.addResource(Files.newInputStream(coreFile.toPath()));
        }
        File hdfsFile = new File(confDirPath + File.separator + "hdfs-site.xml");
        if (!hdfsFile.exists()) {
            InputStream inStream = HBaseUtils.class.getClassLoader().getResourceAsStream("hdfs-site.xml");
            configuration.addResource(inStream);
        } else {
            configuration.addResource(Files.newInputStream(hdfsFile.toPath()));
        }
        File hbaseFile = new File(confDirPath + File.separator + "hbase-site.xml");
        if (!hbaseFile.exists()) {
            InputStream inStream = HBaseUtils.class.getClassLoader().getResourceAsStream("hbase-site.xml");
            configuration.addResource(inStream);
        } else {
            configuration.addResource(Files.newInputStream(hbaseFile.toPath()));
        }

        UserGroupInformation.setConfiguration(configuration);
        UserGroupInformation.loginUserFromKeytab(principal, keytabPath);
        UserGroupInformation loginUser = UserGroupInformation.getLoginUser();

        return loginUser.doAs(
                (PrivilegedExceptionAction<Connection>) () -> ConnectionFactory.createConnection(configuration));
    }

}

windows端java代码 -基于spring boot

public class HBaseReadWriteExample {

    public static void main(String[] args) throws Exception {

        String confDirPath = System.getProperty("user.dir") + File.separator + "src/main/resources/";
        System.setProperty("java.security.krb5.conf", "C:\\Users\\Administrator\\Desktop\\springbootbd_cdp\\springbootbd-product\\src\\main\\resources\\krb5.conf");
        System.setProperty("HADOOP_USER_NAME", "bigdata");
        System.setProperty("user.name", "bigdata");
        UserGroupInformation.loginUserFromKeytab("bigdata@NEWCHINALIFE.COM", "C:\\Users\\Administrator\\Desktop\\springbootbd_cdp\\springbootbd-product\\src\\main\\resources\\bigdata.keytab");
        System.out.println(confDirPath);
        String principal = "bigdata@NEWCHINALIFE.COM";
        String keytabPath = "C:\\Users\\Administrator\\Desktop\\springbootbd_cdp\\springbootbd-product\\src\\main\\resources\\bigdata.keytab";

        Connection conn = HBaseUtils.getHBaseConn(confDirPath, principal, keytabPath);

        Table table = conn.getTable(TableName.valueOf("dc_sma:inc_dev_pas_t_contract_agent"));


        System.out.println(table.getName());
        Scan scan = new Scan();
        ResultScanner rs = table.getScanner(scan);
        for (Result r : rs) {
            System.out.println(r.toString());
        }
    }

}

linux端java代码 -基于spring boot

    static {
        try {
            //String confDirPath = System.getProperty("user.dir") + File.separator + "src/main/resources/";
            String confDirPath = "/etc/hbase/conf";
            //System.setProperty("java.security.krb5.conf", "C:\\Users\\Administrator\\Desktop\\springbootbd_cdp\\springbootbd-product\\src\\main\\resources\\krb5.conf");
            System.setProperty("java.security.krb5.conf", "/etc/krb5.conf");
            System.setProperty("HADOOP_USER_NAME", "bigdata");
            System.setProperty("user.name", "bigdata");
            //UserGroupInformation.loginUserFromKeytab("bigdata@NEWCHINALIFE.COM", "C:\\Users\\Administrator\\Desktop\\springbootbd_cdp\\springbootbd-product\\src\\main\\resources\\bigdata.keytab");
            UserGroupInformation.loginUserFromKeytab("bigdata@NEWCHINALIFE.COM", "/tmp/bigdata.keytab");

            System.out.println(confDirPath);
            String principal = "bigdata@NEWCHINALIFE.COM";
            //String keytabPath = "C:\\Users\\Administrator\\Desktop\\springbootbd_cdp\\springbootbd-product\\src\\main\\resources\\bigdata.keytab";
            String keytabPath = "/tmp/bigdata.keytab";
            try {
                connection = HBaseUtils.getHBaseConn(confDirPath, principal, keytabPath);
                admin=connection.getAdmin();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

注意事项

windows端需要在resources文件夹下,把linux端的配置文件复制过来。如图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值