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

今天在移动的云平台上通过jdbc连接hive,发现云平台使用了 kerberos的认证。与宁波实验环境不同。

发现一文解决了问题,转载如下:

原文地址:http://blog.csdn.net/zengmingen/article/details/78605086

------------------------------

  • 运用 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,而不是用户所对应的principalprivate 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.initSystem.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),否则默认会查询所对应的表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新年快乐轮播特效html,基于owl-carousel的卡片水平轮播展示特效

这是一款基于owl-carousel的卡片水平轮播展示特效。该卡片轮播展示特效可以通过前后导航按钮来切换卡片&#xff0c;它是响应式设计&#xff0c;在手机等小屏幕设备上&#xff0c;会自动调节为只展示一个卡片。使用方法在页面中引入bootstrap.css和style.css文件&#xff0c;以…

parameter缩略语_“参数”的英文缩写有吗?

展开全部“参数”的英文e69da5e887aa3231313335323631343130323136353331333365643662缩写是“parm”。1.音标&#xff1a;[ prɑ:m ]2.具体含义&#xff1a;参数3.双语例句&#xff1a;It involves the same parameter as that involved in the enhancement factor for coagul…

JDBC实现从Hive抽取数据导入Oracle

环境&#xff1a;浙江移动华为云平台 云平台大数据采用了 Kerberos 认证。 开发历程&#xff1a; 1、在宁波大数据实验环境测试通过了JDBC实现从Hive抽取数据导入Oracle功能。 2、通过查看其它项目的数据库访问配置&#xff0c;知道了云平台上的oracle配置。 3、获取hive的…

加拿大计算机专业学什么,加拿大哥伦比亚大学计算机专业课程

计算机专业是加拿大哥伦比亚大学研究生热门专业&#xff0c;很多准备申请加拿大研究生留学的都非常关心加拿大英属哥伦比亚大学计算机专业研究生申请需要注意哪些问题?针对这个问题&#xff0c;出国留学小编为大家进行简要介绍。英属哥伦比亚大学计算机科学硕士专业优势&#…

PC,移动端H5实现实现小球加入购物车效果

HTML部分&#xff1a; <!DOCTYPE html> <html> <head><meta http-equiv"content-type" content"text/html; charsetUTF-8"><title>基于jquery.fly模仿天猫抛物线加入购物车特效代码</title><style>* {margin: 0…

云桌面部署_云桌面时代降临-青椒云工作站

云计算理念是当代互联网时代的新型理念&#xff0c;用户享受的所有资源、所有应用程序全部都由一个存储和运算能力超强的云端后台来提供。云桌面是基于云计算技术&#xff0c;实现各种终端设备之间的互联互通。我们的电子设备等都只是一个单纯的显示和操作终端&#xff0c;它们…

一些配置文件

--用户用linux用户&#xff0c;配置hadoop的Linux用户。非hive连接mysql的用户 HIVE_DRIVERorg.apache.hive.jdbc.HiveDriver HIVE_URLjdbc:hive2://192.168.78.128:10000/default HIVE_UserName root HIVE_PassWord 123456 ORACLE_DRIVERoracle.jdbc.driver.OracleDriver …

妙味css3课程---1-1、css中自定义属性可以用属性选择器么

妙味css3课程---1-1、css中自定义属性可以用属性选择器么 一、总结 一句话总结&#xff1a;可以的。 1、如何实现用属性选择器实现a标签根据href里面含有的字段选择背景图片&#xff1f; p a[href*text]{background-image:url(img/text.gif);} 2、浏览器前缀在js中怎么写&#…

吉林大学计算机与科学专业排名,吉林大学专业排名 哪些王牌专业推荐就读

吉林大学&#xff0c;简称“吉大”&#xff0c;位于吉林省省会长春。是一所“985”、“211”、“双一流”大学。下面我们将要来了解到的是吉林大学的专业排名&#xff0c;他的王牌专业有哪些&#xff0c;一起来看一下吧&#xff01;吉林大学专业排名 哪些王牌专业推荐就读吉林大…

c51为啥要宏定义时钟_51单片机时钟实训报告

时、分、秒计时器设计一、任务及要求用51单片机设计时、分、秒计时器&#xff0c;具体要求如下。1、具有时、分、秒计时功能和8位数码管显示功能&#xff0c;显示格式为&#xff1a;“时&#xff0d;分&#xff0d;秒”&#xff1b;2、用Proteus设计仿真电路进行结果仿真&#…

servlet获取不到Angular4 post过来的参数

副标题&#xff1a;Java如何从HttpServletRequest中读取HTTP请求的body 今天接触一个项目&#xff0c;前台用angular4 post访问后台&#xff0c; this.httpService.post({url: quality/IMSI_MO, IMSImsg: this.InputMsg, TIME1: time1, TIME2: time2 }).subscribe(res > {t…

ios如何看idfv_如何无中生有资源搜索神器

作者 | Castie! 来源 | https://coderzsq.github.io日常扯淡首先申明&#xff0c;这绝对不是标题党&#xff0c;看完全文你一定也能够自行的写出一个资源搜索App&#xff0c;其实这个App&#xff0c;本来是想在App Store卖钱的&#xff0c;毕竟感觉需求量还是很大&#xff0c;虽…

计算机语言需要有英语基础,有关“计算机语言”的问题

一般需要一点英语基础&#xff0c;因很多语句其实是英文单词&#xff0c;且编译错误信息大多是用代码或英文提示的。但一个完全不会英语的人只要努力还是能学会编程语言的&#xff0c;计算机语言中涉及的英文单词大多不是很难&#xff0c;花点时间完全能记住&#xff0c;出错的…

Eclipse Console 加大显示的行数,禁止弹出

原文链接&#xff1a;http://blog.csdn.net/leidengyan/article/details/5686691 -------------------------------------------------- Eclipse Console 加大显示的行数&#xff1a; 在 Preferences-〉Run/Debug-〉Console里边&#xff0c;去掉对Limit console output的选择&…

excel range 判断日期型_为什么精英都是Excel控?

让你相见恨晚的Excel精髓攻略&#xff0c;吐血整理&#xff01;三小时帮你提升90%的效率&#xff0c;这份Excel教程必须&#xff01;&#xff08;点赞收藏&#xff09;Excel能够满足工作中绝大部分的数据分析需求&#xff0c;很多小细节的设计会节省下工作中非常多的时间&#…

移动端 | Vue.js对比微信小程序基础语法

&#xff08;1&#xff09;vue 自定义组件与父组件的通信&#xff0c;props&#xff1a;[abb],可以看成自组建的一个自定义属性 &#xff08;2&#xff09;vue 模版语法{{}} 只能是在DOM中插入&#xff0c;<div>{{acc}}</div>, 绑定属性的话应v-bind&#xff1a;id…

计算机组装电源线排,主机箱背部走线技巧 组装电脑走背线与理线教程

近年来&#xff0c;装机行业流行一个术语&#xff0c;即“走背线”&#xff0c;那么走背线是什么&#xff1f;装机之家小编简单介绍下&#xff0c;通俗的说&#xff1a;走背线就是针对电脑机箱&#xff0c;装机的时候&#xff0c;将机箱内部和电源的线材做到最干净整洁&#xf…

查看oracle数据库允许的最大连接数和当前连接数

原文链接&#xff1a;http://blog.csdn.net/zmx729618/article/details/54018629 ----------------------------------------------------------------------------- 在查看数据的连接情况很有用&#xff0c;写完程序一边测试代码一边查看数据库连接的释放情况有助于分析优化…

干煸线椒的做法_美食:农家蒸土鸡,剁椒梅鲚鱼干,干煸茶树菇,芹菜炒牛肉的做法...

阅读本文前&#xff0c;请您先点击上面“蓝色字体”&#xff0c;再点击“关注”&#xff0c;这样您就可以免费收到我们的最新内容了&#xff0c;每天都会有更新&#xff0c;完全是免费订阅&#xff0c;请放心关注。图文来源网络&#xff0c;侵权联系删除&#xff01; …

计算机出现假桌面怎么解决办法,win10系统apphangxprocb1引起桌面假死怎么解决【图文】...

电脑死机怎么办&#xff1f;有win10系统用户反应win10系统apphangxprocb1引起桌面假死怎么解决&#xff1f;出现这种情况该怎么解决&#xff1f;下面就将方法分享给大家。描述:出现了一个问题,该问题导致了此程序停止与 Windows 进行交互。错误的应用程序路径: C:Windowsexplor…