Hive 1.21

jdbc连接hive并认证kerberos import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.security.UserGroupInformation; import java.io.File; import java.io.IOException; import java.sql.*; import java.util.Locale; impor... 阅读详情

JDBC 连接Hive 简单样例(开启Kerberos)

原创  2017年08月16日 22:43:13
  • 3047
  • 运用 Ambari 搭建的HDP 集群,由于开启了kerberos ,对外提供Hive数据时统一用JDBC 的方式,所以写了下面这么一个简单样例供第三方数据接入参考。

代码如下所示:

package com.bmsoft.hive.impl;

import org.apache.hadoop.security.UserGroupInformation;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 简单的jdbc连接hive实例(已开启kerberos服务)
 */

public class HiveSimple2 {
    /**
     * 用于连接Hive所需的一些参数设置 driverName:用于连接hive的JDBC驱动名 When connecting to
     * HiveServer2 with Kerberos authentication, the URL format is:
     * jdbc:hive2://<host>:<port>/<db>;principal=
     * <Server_Principal_of_HiveServer2>
     */
    private static String driverName = "org.apache.hive.jdbc.HiveDriver";
    // 注意:这里的principal是固定不变的,其指的hive服务所对应的principal,而不是用户所对应的principal
    private static String url = "jdbc:hive2://bigdata40:10000/admin;principal=hive/bigdata40@BIGDATA.COM";
    private static String sql = "";
    private static ResultSet res;

    public static Connection get_conn() throws SQLException, ClassNotFoundException {
        /** 使用Hadoop安全登录 **/
        org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
        conf.set("hadoop.security.authentication", "Kerberos");

        if (System.getProperty("os.name").toLowerCase().startsWith("win")) {
            // 默认:这里不设置的话,win默认会到 C盘下读取krb5.init
            System.setProperty("java.security.krb5.conf", "C:/Windows/krbconf/bms/krb5.ini");
        } // linux 会默认到 /etc/krb5.conf 中读取krb5.conf,本文笔者已将该文件放到/etc/目录下,因而这里便不用再设置了
        try {
            UserGroupInformation.setConfiguration(conf);
            UserGroupInformation.loginUserFromKeytab("test2/hdp39@BMSOFT.COM", "./conf/test2.keytab");
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        Class.forName(driverName);
        Connection conn = DriverManager.getConnection(url);
        return conn;
    }

    /**
     * 查看数据库下所有的表
     *
     * @param statement
     * @return
     */
    public static boolean show_tables(Statement statement) {
        sql = "SHOW TABLES";
        System.out.println("Running:" + sql);
        try {
            ResultSet res = statement.executeQuery(sql);
            System.out.println("执行“+sql+运行结果:");
            while (res.next()) {
                System.out.println(res.getString(1));
            }
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 获取表的描述信息
     *
     * @param statement
     * @param tableName
     * @return
     */
    public static boolean describ_table(Statement statement, String tableName) {
        sql = "DESCRIBE " + tableName;
        try {
            res = statement.executeQuery(sql);
            System.out.print(tableName + "描述信息:");
            while (res.next()) {
                System.out.println(res.getString(1) + "\t" + res.getString(2));
            }
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 删除表
     *
     * @param statement
     * @param tableName
     * @return
     */
    public static boolean drop_table(Statement statement, String tableName) {
        sql = "DROP TABLE IF EXISTS " + tableName;
        System.out.println("Running:" + sql);
        try {
            statement.execute(sql);
            System.out.println(tableName + "删除成功");
            return true;
        } catch (SQLException e) {
            System.out.println(tableName + "删除失败");
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 查看表数据
     *
     * @param statement
     * @return
     */
    public static boolean queryData(Statement statement, String tableName) {
        sql = "SELECT * FROM " + tableName + " LIMIT 20";
        System.out.println("Running:" + sql);
        try {
            res = statement.executeQuery(sql);
            System.out.println("执行“+sql+运行结果:");
            while (res.next()) {
                System.out.println(res.getString(1) + "," + res.getString(2) + "," + res.getString(3));
            }
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 创建表
     *
     * @param statement
     * @return
     */
    public static boolean createTable(Statement statement, String tableName) {
        sql = "CREATE TABLE test_1m_test2 AS SELECT * FROM test_1m_test"; //  为了方便直接复制另一张表数据来创建表
        System.out.println("Running:" + sql);
        try {
            boolean execute = statement.execute(sql);
            System.out.println("执行结果 :" + execute);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    public static void main(String[] args) {

        try {
            Connection conn = get_conn();
            Statement stmt = conn.createStatement();
            // 创建的表名
            String tableName = "test_100m";
            show_tables(stmt);
            // describ_table(stmt, tableName);
            /** 删除表 **/
            // drop_table(stmt, tableName);
            // show_tables(stmt);
            // queryData(stmt, tableName);
            createTable(stmt, tableName);
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("!!!!!!END!!!!!!!!");
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176

pom.xml 文件如下所示:

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>1.2.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>1.2.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-metastore -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-metastore</artifactId>
            <version>1.2.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-common -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-common</artifactId>
            <version>1.2.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-service -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-service</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <type>jar</type>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.3</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

参考文档: 
https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients

文档其中比较值得注意的一点是:

JDBC Client Setup for a Secure Cluster
When connecting to HiveServer2 with Kerberos authentication, the URL format is:
jdbc:hive2://<host>:<port>/<db>;principal=<Server_Principal_of_HiveServer2>
  • 1
  • 2
  • 3
  • 这里的principal是固定不变的,其指的hive服务所对应的principal,而不是用户所对应的principal; 对于这里的可以为不存在的数据库,但是如果这么做那么在查询表的时候则需要指出其所在的库(如db.tablename),否则默认会查询所对应的表。
jdbc连接kerberos认证的hive jdbc hive kerberos scala java 阅读详情

相关推荐

使用Java连接Kerberos认证的Hive编程

在Hadoop生态系统中,Hive是一个常用的大数据处理工具,可以通过Java数据库连接(JDBC)来连接和操作Hive。本文将介绍如何使用Java编程语言连接Kerberos认证的Hive,以进行安全的数据访问和操作。通过以上步骤,我们可以使用Java编程语言连接Kerberos认证的Hive,进行安全的数据访问和操作。在实际应用中,您可能需要根据您的环境和需求进行适当的配置和修改。在连接字符串中,我们指定了Hive服务器的主机名、端口号、默认数据库以及Hive服务的Kerberos主体。

PixelDyno的博客 858

JDBC 连接Hive 简单样例(开启Kerberos)

运用 Ambari 搭建的HDP 集群,由于开启了kerberos ,对外提供Hive数据时统一用JDBC 的方式,所以写了下面这么一个简单样例供第三方数据接入参考。 代码如下所示:package com.bmsoft.hive.impl;import org.apache.hadoop.security.UserGroupInformation; import java.io.IOExceptio

Stay Focused And Work Hard !!! 2万+

hive2-jdbc:Hive JDBC连接示例,包括简单和kerberos身份验证方法

Hive JDBC连接示例 该项目展示了如何使用各种不同的方法连接到Hiveserver2。 所有类仅适用于Hiveserver2。 正在使用Cloudera JDBC驱动程序,可以从下载。 在撰写本文时,最新版本为v2.5.15 。 要求: 您需要下载驱动程序并将其复制到lib文件夹。 从下载zip,以获取正确的操作系统和体系结构。 解压缩并转到Cloudera_HiveJDBC41_xxx文件夹。 将所有罐子从那里复制到lib文件夹。 JDBC API v3.x支持JRE v4.0或v5.0 JDBC API v4.x支持JRE v6.0或更高版本 JDBC API v4.1.x支持JRE v7.0或更高版本 适用于Apache Hive的Cloudera JDBC驱动程序支持Hive 0.11、0.12、0.13、0.14、1.0和1.1。 有关更多信息,请参阅下载的z

【大数据笔记】java jdbc连接hive数据库;java hive连接kerberos

winutils.exe是在Windows系统上需要的hadoop调试环境工具,里面包含一些在Windows系统下调试hadoop、spark所需要的基本的工具类。在使用idea开发,spark程序时,需要在开发环境模拟hadoop环境,不然,每次都要打jar去集群环境执行调试程序,严重影响开发效率。3、用传统改的Class.forName,然后DriverManager去拿。1、pom.xml配置。1、pom.xml配置。

NAMELZX的博客 2148

10xGenomics官方可视化工具——Loupe Browser

Loupe Browser是⼀款10xGenomics开发的交互式桌⾯应⽤程序,⽤于探索10x单细胞数据,可以用来找出感兴趣的细胞、找出显著差异表达的基因、鉴定细胞类型、探索细胞亚类和数据共享。

weixin_47195452的博客 3344

房产平台系统小程序源码

🏠 一键解锁购房新体验 🔓房产小程序 实现前端 发布二手房 租房 商品 求租 求购等信息;后台发布 新房,二手房租房 商品 写字楼 求租求购等房源信息;功能完善的一块房产小程序。

2401_84413757的博客 794

Ubuntu21.10搭建Hive1.2.2

Ubuntu21.10搭建Hive1.2.2 准备工作 apache-hive-1.2.2-bin.tar.gz与mysql-connector-java-8.0.28.tar.gz上传至Ubuntu 开始安装配置Hive 查看软件包 把hive包解压到安装位置 到软件目录,修改文件名 配置环境变量 输入sudo vim /etc/profile sudo vim /etc/profile 在末尾添加 export HIVE_HOME=/

qq_33202785的博客 2212

DSP28335 ADC模块实战:从寄存器配置到精准数据采集(附代码详解)

本文详细解析DSP28335的ADC模块配置与数据采集实战,涵盖寄存器设置、采样窗口优化、中断处理及代码实现。重点解决ADC精度问题,如采样窗口不足导致数据偏差,提供完整代码示例和调试技巧,助力工程师实现精准数据采集。

kkk56的博客 862

安装hive1..21

hive1.2.1 apache-hive-1.2.1-bin.tar.gz wget http://mirrors.cnnic.cn/apache/hive/hive-1.2.1/apache-hive-1.2.1-bin.tar.gz tar xzvf apache-hive-1.2.1-bin.tar.gz -C /home/pipstat/yarn/

iteye_5080的博客 191

rk3576之imx415 4k@60fps

1;0;1;0;1;0;1;0;1;0;1;0;1;0;

darennet的专栏 704

腾讯滑块验证码collect参数逆向与JSVMP对抗实战

本文深入解析腾讯滑块验证码collect参数的逆向过程与JSVMP虚拟机对抗技术。通过详细的环境搭建、抓包分析和JSVMP逆向技巧,揭示collect参数的生成逻辑与加密流程,并提供完整的模拟实现方案和常见问题排查方法,助力开发者突破腾讯天御验证码的防护机制。

weixin_29009501的博客 1573

hive 1.21版本与hudi进行集成

要在 Hive 1.2.1 版本中集成 Hudi,需要按照以下步骤进行操作: 下载并安装 Hudi,可以在其 GitHub 页面上找到最新版本的二进制文件。 将 Hudi 的 jar 包添加到 Hive 的 classpath 中。可以通过在 hive-env.sh 文件中设置 HIVE_AUX_JARS_PATH 环境变量来实现。 在 Hive 中使用 add jar 命令将 Hudi 的...

weixin_35752645的博客 374

安卓讲课笔记1.1 安装Android Studio

1. 能安装配置Android Studio; 2. 能创建安卓虚拟机(AVD); 3. 能创建简单安卓应用

howard2005的专栏 3351

hive-1.21用mysql做元数据库安装详解及遇到的问题解答

DT-大数据 hive1.2.1用mysql作为元数据库搭建 Hive只在一个节点上安装即可 安装前提是hadoop-2.6.3已正确安装配置并能正常启动 1.下载apache-hive-1.2.1-bin.tar.gz 2.解压更名 [hadoop@master ~]# tar -zxf apache-hive-1.2.1-bin.tar.gz -C /home/hadoo

jxb116的博客 806

【深度学习】最强算法之:残差网络(ResNet)

一篇掌握深度学习算法之:残差网络

商务合作 | 面试培训 | 职场规划 ==>主页扫码 7837

2026实测可用!4个专业AI Agent Skills垂直搜索平台对比

📊本文以表格形式整理4个实测可用的专业AI Agent Skills垂直搜索平台,涵盖资源规模、适配生态等关键维度🤖,适合开发者按需选择技能获取渠道,解决平台筛选与访问难题✨

XiaoqiangClub的博客 523

hadoop-2.4.0-x64+hive-1.2.1+Zookeeper-3.4.5+Hbase-0.98.21自动化安装脚本

hadoop-2.4.0-x64+hive-1.2.1+Zookeeper-3.4.5+Hbase-0.98.21自动化安装脚本 参考资料:Hadoop-2.3.0详细安装过程 码云GIT:hadoop-2.4.0家族自动化安装脚本》》》获取邀请码 你没看...

dengjian3190的博客 227

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

轻松入门大数据 第9章 入门到进阶:如何快速掌握Hive DDL&DML 9.1 Hive DDL&DML 9.1.21 SQL查询之基础使用

轻松入门大数据 第9章 入门到进阶:如何快速掌握Hive DDL&DML 9.1 Hive DDL&DML 9.1.21 SQL查询之基础使用

代码改变世界 266

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Hive-0.7.1集成hadoop-0.21的实践

testdddddddd

枫之语 231

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

vm环境配置:CentOS64+hadoop3.14+hive3.1.2+spark2.3.1+scala-2.12.8+python3.8.6+mysql8.0.21

1.vm 安装vm 2.centos 64位 3.hadoop3.14 可以配置伪分布模式 4.hive3.1.2 注意版本问题 5.spark2.3.1 配置前提环境 6.scala-2.12.8 版本问题 7.python3.8.6 配置环境 8.mysql8.0.21 权限问题

lianying03的博客 252

spark连接hive报错:java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf

错误信息如下: 20/06/11 11:04:35 INFO HiveUtils: Initializing HiveMetastoreConnection version 3.0 using Exception in thread "main" java.lang.ClassNotFoundException: java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf when creating Hive client.

qiangzi_lg的博客 5942

Hadoop3.x集成Hive3.1.2手册

1)、安装MySQL 卸载内置MariaDB rpm -qa | grep mariadb sudo yum -y remove mariadb-libs-5.5.68-1.el7.x86_64 下载并解压文件 下载地址:https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.21-1.el8.x86_64.rpm-bundle.tar tar -xvf mysql-8.0.21-1.el7.x86_64.rpm-bundle.ta

坚哥笔记 1583

博客摘录「 flink-sql读写hive-1.16」2024年2月21日

Flink支持从Hive中以批或流模式来读取数据。当使用批模式运行时,Flink将会对表当前时间点的数据进行查询。流式读取将会持续的监控表,并且抓取可见的新数据。Flink默认以有界流读取表。

qq_30673755的博客 423

轻松入门大数据 第10章 入门到进阶:如何快速掌握Hive核心函数 10.1 Hive函数 10.1.21 【重要必掌握】窗口分析函数场景row_number

轻松入门大数据 第10章 入门到进阶:如何快速掌握Hive核心函数 10.1 Hive函数 10.1.21 【重要必掌握】窗口分析函数场景row_number

代码改变世界 186

ubutun安装MySQL hive配置_Ubuntu16.04下Hive的安装与配置

一、系统环境os : Ubuntu 16.04 LTS 64bitjdk : 1.8.0_161hadoop : 2.6.4mysql : 5.7.21hive : 2.1.0在配置hive之前,要先配置hadoop。二、安装步骤1、hive的安装与配置1.1 hive的安装下载hive2.1.0,使用以下命令安装到/usr/local最后一条sudo chown -R hadoop hive...

weixin_36036852的博客 591

centos7中hive3.1.0安装和部署

参考: https://blog.csdn.net/a123demi/article/details/72742279 一 前期准备 1. hadoop集群 版本: 2.8.4 安装: https://blog.csdn.net/sjhuangx/article/details/79783051 2 mysql 版本: 5.7.21 安装: https://blog.csdn.net...

sjhuangx的专栏 4766
上一篇: java通过JDBC驱动连接操作hive实例
下一篇: Hive用户接口(二)—使用Hive JDBC驱动连接Hive操作实例
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值