惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
量子位
博客园 - 三生石上(FineUI控件)
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
人人都是产品经理
人人都是产品经理
V
Visual Studio Blog
Jina AI
Jina AI
L
LangChain Blog
M
MIT News - Artificial intelligence
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学

博客园 - 李阳

Sqoop执行mysql删除语句 ubuntu 升级内核 Ubuntu 13.04设置root用户登录图形界面 ubuntu make menuconfig error Oracle创建用户和表空间脚本 GPL & BSD 许可证 - 李阳 调用WindowsAPI显示帮助提示 SQLServer 存储过程简介与使用方法 SQLServer 游标简介与使用说明 SQLServer 表值函数与标量值函数 定义方式与调用区别 使用Graphics画图的小技巧 灵活使用多线程编程——EventWaitHandle类 灵活使用多线程编程——AutoResetEvent类 [提问] 关于C#自定义控件的问题(请高手帮忙解决) Access数据库连接池问题 软件版本号的详解 安全的ACCESS加密方法 Oracle Hint的用法 Oracle存储过程编写经验和优化措施
Java采用JDBC的方式连接Hive(SparkSQL)
李阳 · 2017-10-14 · via 博客园 - 李阳

前两天,由于系统的架构设计的原因,想通过Java直接访问Hive数据库,对于我这个Java以及Hadoop平台的菜鸟来说,的确是困难重重,不过,还好是搞定了。感觉也不是很麻烦。这篇文章,作为一个感想记录下来。( 作者:yangyang8848)

一、Hive的访问方式

一般情况下,Hive是不能直接Java连接并访问的,后来出现来一个SparkSQL的东东,变得可以通过JDBC的方式访问连接。首先,我先介绍一些从Linux下访问的方法:

1、远程登录到Linux平台:

2、进入到hive数据库中,我们执行一条查询语句:

通过上图可以看到,系统执行了Map/Reduce操作,并最后显示相关的结果。

这里有一个干货哦:Hive查询语句不支持类似于Mysql中的分页查询的,因此,这里采用了另外一种办法进行分页,自己看图片学习啦~!

3、下边我们采用Beeline远程连接SqarkSQL然后访问Hive数据。

通过上边页面可以看到,系统可以正确将数据查询出来。

二、使用Java代码进行连接访问。

如果想要通过Java进行访问,首先要在引用一下三个Jar包:

 <dependency>  
        <groupId>org.apache.hive</groupId>  
        <artifactId>hive-jdbc</artifactId>  
        <version>1.2.1</version>  
</dependency>  
   
<dependency>  
        <groupId>org.apache.hadoop</groupId>  
        <artifactId>hadoop-common</artifactId>  
       <version>2.4.1</version>  
</dependency>  
  
<dependency>  
       <groupId>jdk.tools</groupId>  
       <artifactId>jdk.tools</artifactId>  
       <version>1.6</version>  
       <scope>system</scope>  
       <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>  
   </dependency>  

 需要注意的是,包的版本一定要确认好,切勿版本过高

如果发生以下错误:

 org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset!   Struct:TOpenSessionReq(client_protocol:null)

则极可能的原因是你项目的hive-jdbc版本和服务器不一致的原因造成的,替换成和服务器一致的版本就可以了,

以下访问代码都已经经过了测试,拿走直接用,哈哈:

	public static int hiveJDBC_RowCount(String sql,Map<Integer,String> params){
		try {
			ResourceBundle rb = ResourceBundle.getBundle("config");
		    Class.forName(rb.getString("hivedriverClassName")).newInstance();

			Connection conn = DriverManager.getConnection(rb.getString("hiveurl"),rb.getString("hiveusername"),rb.getString("hivepassword"));
			java.sql.PreparedStatement pstsm = conn.prepareStatement(sql);
			for(Integer key : params.keySet()){
				pstsm.setString(key, params.get(key));
			}
			ResultSet resultSet = pstsm.executeQuery();
			int rowNum = 0;
			if(resultSet.next()){
				rowNum = resultSet.getInt(1);
			}
			return rowNum; 
		} catch (Exception e) {
			System.out.println(e);
			return 0;
		}
	}
hivedriverClassName=org.apache.hive.jdbc.HiveDriver
hiveurl=jdbc:hive2://192.168.31.243:10000/default
hiveusername=root
hivepassword=