hive jdbc/metastore客户端方式连接开启kerberos的hive集群api

2023-11-19

pom依赖

<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-jdbc</artifactId>
    <version>3.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-metastore</artifactId>
    <version>3.1.2</version>
    <exclusions>
        <exclusion>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>*</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>*</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </exclusion>
    </exclusions>
</dependency>

通过jdbc方式查询hive元数据信息

package kerberos;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.security.UserGroupInformation;
import java.io.IOException;
import java.sql.*;

public class HiveJdbcKerberosApi {

    public static void main(String[] args) throws SQLException, IOException, ClassNotFoundException {

        System.setProperty("java.security.krb5.conf", "D:/cy/keytab/krb5.conf");
//        System.setProperty("sun.security.krb5.debug", "true");
//        System.setProperty("HADOOP_JAAS_DEBUG","true");

        String jdbcUrl="jdbc:hive2://henghe-33:10000/default;principal=henghe/henghe-33@HENGHE.COM;?hive.client.keytab.file=D:/cy/keytab/henghe.tenant.keytab;" +
                "hive.client.kerberos.principal=henghe@HENGHE.COM";

        Configuration configuration = new Configuration();
        configuration.set("hadoop.security.authentication", "kerberos");

        configuration.set("hive.metastore.uris", "thrift://henghe-33:9083");

        UserGroupInformation.setConfiguration(configuration);
        UserGroupInformation.loginUserFromKeytab("henghe@HENGHE.COM", "D:/cy/keytab/henghe.tenant.keytab");

        Class.forName("org.apache.hive.jdbc.HiveDriver");


//        testHiveDatabase(jdbcUrl);
//
        testHiveTable(jdbcUrl,"test");


       testHiveColumn(jdbcUrl,"test","default");
    }


    public static void testHiveTable(String jdbcUrl,String databaseName) throws SQLException {
        Connection connection=
                DriverManager.getConnection(jdbcUrl);

        //获取metadata
        DatabaseMetaData metaData = connection.getMetaData();

        ResultSet rs2 =
                metaData.getTables(databaseName, databaseName, null, new String[]{"TABLE"});

        while (rs2.next()) {
          String tableName=rs2.getString("TABLE_NAME");
          System.out.println("table------"+tableName);
        }
    }


    public static void testHiveDatabase(String jdbcUrl) throws SQLException {
        Connection connection=
                DriverManager.getConnection(jdbcUrl);

        //获取metadata
        DatabaseMetaData metaData = connection.getMetaData();
        //创建一个Statement对象
        Statement stmt = connection.createStatement();
        //检索数据
        ResultSet rs = stmt.executeQuery("show databases");
//        ResultSet rs1 = metaData.getCatalogs();
        while(rs.next()) {
            System.out.print("databases----"+rs.getString(1));
            System.out.println();
        }
    }


    public static void testHiveColumn(String jdbcUrl,String tableName,String databaseName) throws SQLException {
        Connection connection=
                DriverManager.getConnection(jdbcUrl);

        //获取metadata
        DatabaseMetaData metaData = connection.getMetaData();
        //创建一个Statement对象
        ResultSet rs2 =
                metaData.getColumns("default", "default", "test",null);

        while (rs2.next()) {
            String columnName=rs2.getString("COLUMN_NAME");
            String remark=rs2.getString("REMARKS");
            Integer digits=rs2.getInt("DECIMAL_DIGITS");
            System.out.println("column---"+columnName);
            System.out.println("remarks---"+remark);
            System.out.println("digit---"+digits);
            System.out.println("MaxLength--"+rs2.getInt("COLUMN_SIZE"));
            System.out.println("TYPE_NAME--"+rs2.getString("TYPE_NAME"));
            System.out.println("auto---"+rs2.getString("is_auto_increment"));
            System.out.println("index--"+rs2.getInt("ORDINAL_POSITION"));
        }
    }

}

通过mestoreClient获取hive元数据信息

package kerberos;

import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.HiveMetaStoreClient;
import org.apache.hadoop.hive.metastore.api.Table;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.thrift.TException;

import java.io.IOException;
import java.util.List;
import java.util.Map;

public class HiveKerberosApi {

    private static final String USER_NAME = "user.name";
    // Some Hive Metastore properties

    public static void  main(String[] args){
        HiveKerberosApi test=new HiveKerberosApi();
        try {
            test.testHiveColumn();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void testHiveColumn() throws TException {

//        System.setProperty("java.security.krb5.conf", "D:\\kerberos\\krb5.conf");
        System.setProperty("java.security.krb5.conf", "D:/cy/keytab/krb5.conf");
        System.setProperty("sun.security.krb5.debug", "true");
        System.setProperty("HADOOP_JAAS_DEBUG","true");


        HiveConf conf=new HiveConf(this.getClass());
//        conf.set("hive.metastore.uris", "thrift://henghe-131:9083");
        conf.set("hive.metastore.uris", "thrift://henghe-33:9083");
        conf.set("hadoop.security.authentication", "kerberos");
        //todo 默认为true
        conf.set("hive.metastore.execute.setugi","true");
        conf.set("hive.security.authorization.enabled", "false");
        conf.set("hive.metastore.sasl.enabled","true");
        conf.set("hive.metastore.kerberos.principal", "henghe/henghe-33@HENGHE.COM");
        conf.set("hive.server2.authentication.kerberos.principal","henghe/henghe-33@HENGHE.COM");
        UserGroupInformation.setConfiguration(conf);
        try {
            UserGroupInformation.loginUserFromKeytab("henghe@HENGHE.COM", "D:/cy/keytab/henghe.tenant.keytab");
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        HiveMetaStoreClient client=new HiveMetaStoreClient(conf);
        List<String> aDefault = client.getAllDatabases();
        System.out.println(aDefault.get(0));
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hive jdbc/metastore客户端方式连接开启kerberos的hive集群api 的相关文章

随机推荐

  • 水文数据产品的网站

    主要记录在平常用到的水文数据产品的网站 包括水库 湖泊 河流等 1 hydroweb 官网 https www theia land fr en hydroweb 界面 下载后的数据是txt格式 如需转成csv 可这样批量操作 import
  • React hooks中ref、forwardRef、useImperativeHandle的结合使用

    ref 用来绑定到HTML元素或者组件上 获取其DOM forwardRef 帮助子组件拿到父组件中子组件上面绑定的ref 绑定到自己的某一个元素中 这样就将子组件的DOM直接暴露给了父组件 这种方式存在的弊端 1 直接暴露给父组件带来的问
  • Linux 查看目录和文件

    目录 1 显示当前目录 pwd 2 改变目录 cd 3 列出目录内容 ls 4 列出目录内容 dir和vdir 5 查看文本文件 cat和more 6 阅读文件的开头和结尾 head和tail 7 查找文件内容 grep 1 显示当前目录
  • 存储解决方案之——FC存储解决方案

    FC存储解决方案 一 需求分析 当前 在FC Fibre Channel 领域里鲜有新技术问世 很多技术都已经成为过去时 近来在技术上的演进就是从2Gbit s 到4Gbit s的过渡 而且基本上已经完成 基于光纤通道 FC 的存储局域网络
  • Win10中docker的安装与使用

    WIN10中DOCKER的安装与使用 WIN10中DOCKER的安装与使用 1 docker的安装 环境准备 下载安装 2 docker的入门 开始使用 3 docker的常用配置 在PowerShell中设置 tab键自动补全 其实用的都
  • 蓝牙设备中的Device UUID 与 Service UUID

    Device UUID也可以被称作为DeviceID Android 设备上扫描获取到的 deviceId 为外围设备的 MAC 地址 相对固定 iOS 设备上扫描获取到的 deviceId 是系统根据外围设备 MAC 地址及发现设备的时间
  • mysql的left join和inner join的效率对比,以及如何优化

    一 前言 最近在写代码的时候 遇到了需要多表连接的一个问题 初始sql类似于 select from a left join b on a x b x left join c on c y b y left join d on d z c
  • Idea项目如何打包

    项目代码打包 一 idea软件为例 二 打包前的准备 1 application yml修改 代码 第三行dev改为pro spring profiles active SPRING PROFILES ACTIVE dev activiti
  • thinkphp5.0 常量

    预定义常量 EXT 类库文件后缀 php THINK VERSION 框架版本号 路径常量 DS 当前系统的目录分隔符 THINK PATH 框架系统目录 D phpStudy WWW my tadmin thinkphp ROOT PAT
  • Hash映射理解

    先说数组 数组优点之一 能通过索引很快定位到值 hashmap 就是利用了数组这个优点 对比 线性映射 定义一个数组 数组的元素是结构体 结构体包括 一对键 值 伪代码表示 a 0 struct Bill 5 a 1 struct KK 6
  • 【Unity3d】Animator和Animation组件使用注意事项

    一 Animator一般用于人物动画控制 特点是动画是持续的 可能有动作切换 Animation一般用于间断性的动画的控制 比如一个场景特效的播放 只播放一次就完了 二 实测Animation速度比Animator快10 左右 内存占用没测
  • vue+高德地图 点击地图获取经纬度和详细地址

    html源码
  • docker什么命令启动服务?

    docker启动服务的命令是 1 启动 1 systemctl start docker 2 守护进程重启 1 sudo systemctl daemon reload 3 重启docker服务 1 systemctl restart do
  • HDLC原理及配置

    一 HDLC原理 HDLC是由国际标准化组织 ISO 制定的面向比特的同步数据链路层协议 主要用于封装同步串行链路上的数据 HDLC是在数据链路层中被广泛使用的协议之一 二 HDLC配置 AR1
  • 使用Qemu+gdb来调试内核

    原文地址 http blog csdn net iamljj article details 5655169 昨天听别人讲使用Qemu和gdb来实现源码级内核调试 今天试了一下 果然非常方便 现简单的记录一下 Qemu是一个开源的虚拟机软件
  • Unity --- Vector3类的API讲解

    1 Vector3中的静态变量是相对于世界坐标系的还是相对于自身坐标系呢 我们创建的Vector3类对象同理 答 这取决我们将创建的Vector3类对象 通过Vector3调用的静态变量传给了哪一个引用 如果是传给了positon的话 则该
  • 工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计

    鸿鹄工程项目管理系统 Spring Cloud Spring Boot Mybatis Vue ElementUI 前后端分离构建工程项目管理系统 1 项目背景 一 随着公司的快速发展 企业人员和经营规模不断壮大 为了提高工程管理效率 减轻
  • 14_Deep Computer Vision Using Convolutional Neural Networks_max pool_GridSpec_tf.nn, layers, contrib

    cp15 Classifying Images with Deep Convolutional NN Loss Cross Entropy ax text mnist CelebA Colab ckhttps blog csdn net L
  • socket连接超时问题

    一部分 把CSDN与中文yahoo翻了底朝天 也没找到如何设置socket的连接超时的满意方法 问此问题的兄弟已有一大堆 这里偶就讲一下win下如何设置socket的connect超时 设置connect的超时很简单 CSDN上也有人提到过
  • hive jdbc/metastore客户端方式连接开启kerberos的hive集群api

    pom依赖