Hive学习之六 《Hive进阶— —hive jdbc》 详解
接Hive学习五
http://www.cnblogs.com/invban/p/5331159.html
一、配置环境变量
hive jdbc的开发,在开发环境中,配置Java环境变量
修改/etc/profile
vi /etc/profile
PATH=$PATH:/usr/java/jdk1..0_31/bin:/opt/litong/bin
source /etc/profile 立即起效
二、配置文件开发
Hive_sql=select ds,hour,huodong,pv,uv from rpt.rpt_sale_daily where ds='{$date}' and hour='{$hour}' limit 20
Mysql_table=rpt_sale_daily
mysql_columns=id,hours,huodong,pvv,uvv
mysql_delete=delete from rpt_sale_daily where id='{$date}'
三、创建项目实现hive的jdbc接口
①配置Connection的Java文件。
import java.sql.Connection;
import java.sql.DriverManager;
public class MyConnection {
public static Connection getMysqlInstance() throws Exception
{ Class.forName("com.mysql.jdbc.Driver") ;
Connection con =
DriverManager.getConnection("jdbc:mysql://192.168.0.115:3306/test","root","123456");
return con;
}
public static Connection getHiveInstance() throws Exception{ Class.forName("org.apache.hive.jdbc.HiveDriver") ;
Connection con =
DriverManager.getConnection("jdbc:hive2://192.168.0.115:10000/default", "root", "");
return con;
}
}
②开发Hive2Mysql的Java文件
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Connection;
import java.util.Properties; public class Hive2Mysql { public Hive2Mysql(String propertyName) throws Exception{
init(propertyName);
} Properties prop = new Properties();
public void init(String propertyName) throws Exception{
InputStream stream = new FileInputStream(propertyName);
prop.load(stream);
} public static void main(String[] args) {
try {
if(args.length<1){
System.out.println("please set propertyName");
System.exit(1);
}
String propertyName = args[0];
Hive2Mysql h2m = new Hive2Mysql(propertyName);
String hive_sql = h2m.prop.get("Hive_sql").toString();
String mysql_table = h2m.prop.get("Mysql_table").toString();
String mysql_columns = h2m.prop.getProperty("mysql_columns").toString();
String mysql_delete = h2m.prop.getProperty("mysql_delete").toString();
//insert into
String mysql_sql = "insert into "+mysql_table+" ("+mysql_columns+") values(" ; Connection mysqlCon = MyConnection.getMysqlInstance();
Connection myHiveCon = MyConnection.getHiveInstance(); //进行hive查询
Statement stHive = myHiveCon.createStatement();
ResultSet rsHive = stHive.executeQuery(hive_sql); Statement stMysql = mysqlCon.createStatement();
//删除mysql里此次insert的数据
stMysql.execute(mysql_delete); int len = hive_sql.split("from")[0].split("select")[1].trim().split(",").length ;
System.out.println(len);
String value = "";
while(rsHive.next()){
for(int i=1;i<=len;i++){
value += "'"+rsHive.getString(i)+"',";
}
//去掉最后一个逗号
value = value.substring(0, value.length()-1);
mysql_sql = mysql_sql+value+")";
stMysql.execute(mysql_sql);
System.out.println(mysql_sql);
//重置value
value = "";
mysql_sql = "insert into "+mysql_table+" ("+mysql_columns+") values(" ;
}
//关闭连接
rsHive.close();
stHive.close();
stMysql.close();
mysqlCon.close();
myHiveCon.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
③在mysql中,创建表rpt_sale_daily

④将Java项目打包成jar文件,并上传配置文件aa.property
将jar文件传到/opt/litong/lib/下
配置文件放在/opt/litong/lib/property/rpt_sale_daily下
⑤编写hql文件代码,在/opt/litong/lib/property/rpt_sale_daily目录下创建rpt_sale_daily.hql
add jar /opt/litong/lib/hiveUDF.jar
create temporary function GetCommentNameOrId as 'com.litong.hive.udf.GetCommentNameOrId'; insert overwrite table rpt.rpt_sale_daily partition (ds='2015-08-28',hour='')
select GetCommentNameOrId(url,"sale") huodong,count(url) pv,count(distinct guid) uv from default.track_log a
where ds='2015-08-28' and hour=''
group by ds,GetCommentNameOrId(url,"sale"); insert overwrite table rpt.rpt_sale_daily partition (ds='2015-08-28',hour='')
select GetCommentNameOrId(url,"sale") huodong,count(url) pv,count(distinct guid) uv from default.track_log a
where ds='2015-08-28' and hour=''
group by ds,GetCommentNameOrId(url,"sale");
⑥将jar封装成命令hive2mysql。
在opt/litong/bin中,vi hive2mysql
java -jar /opt/litong/lib/hive2mysql.jar $*
注释$*:传的参数
⑦编写shell脚本,在/opt/litong/lib/property/rpt_sale_daily目录下创建rpt_sale_daily.sh
#!/bin/sh
hive -f rpt_sale_daily.hql
hive2mysql /opt/litong/lib/property/rpt_sale_daily/aa.property
总结:
以后在执行过程中,配置三个文件即可,分别是:
aa.property, rpt_sale_daily.hql, rpt_sale_daily.sh
⑧执行shell脚本文件,rpt_sale_daily.sh
得到的结果为:

Hive学习之六 《Hive进阶— —hive jdbc》 详解的更多相关文章
- Spring4 JDBC详解
Spring4 JDBC详解 在之前的Spring4 IOC详解 的文章中,并没有介绍使用外部属性的知识点.现在利用配置c3p0连接池的契机来一起学习.本章内容主要有两个部分:配置c3p0(重点)和 ...
- JDBC详解(一)
一.相关概念介绍 1.1.数据库驱动 这里驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理 ...
- JDBC详解1
JDBC详解1 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中u ...
- JavaScript进阶内容——DOM详解
JavaScript进阶内容--DOM详解 当我们已经熟练掌握JavaScript的语法之后,我们就该进入更深层次的学习了 首先我们思考一下:JavaScript是用来做什么的? JavaScript ...
- JavaScript进阶内容——BOM详解
JavaScript进阶内容--BOM详解 在上一篇文章中我们学习了DOM,接下来让我们先通过和DOM的对比来简单了解一下BOM 首先我们先来复习一下DOM: 文档对象模型 DOM把文档当作一个对象来 ...
- ASP.NET MVC 5 学习教程:生成的代码详解
原文 ASP.NET MVC 5 学习教程:生成的代码详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...
- JDBC详解系列(二)之加载驱动
---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)--- 在JDBC详解系列(一)之流程中 ...
- JDBC详解系列(三)之建立连接(DriverManager.getConnection)
在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤. JDBC流程: 第一步:加载Driver类,注册数据库驱动: 第二步:通过DriverManager,使用url,用户名和密码 ...
- IP地址和子网划分学习笔记之《IP地址详解》
2018-05-03 18:47:37 在学习IP地址和子网划分前,必须对进制计数有一定了解,尤其是二进制和十进制之间的相互转换,对于我们掌握IP地址和子网的划分非常有帮助,可参看如下目录详文. ...
- OpenCV学习C++接口 Mat像素遍历详解
OpenCV学习C++接口 Mat像素遍历详解
随机推荐
- js中的Call与apply方法
看到同行写得不错,直接转载了...0.0 祝大家天天开心! 例子来源http://uule.iteye.com/blog/1158829
- Tribles(概率)
Description Problem ATribblesInput: Standard Input Output: Standard Output GRAVITATION, n."Th ...
- bzoj2561
对于新加入的边,必须要既可能在最小生成树上也可能在最大生成树上我们先对于最小生成树考虑根据kruskal的理论,不难发现,u--v 长度为L的边可能出现在最小生成树上就是说删边剩下的比L小的边一定不能 ...
- POJ 2762 Going from u to v or from v to u?(强联通 + TopSort)
题目大意: 为了锻炼自己的儿子 Jiajia 和Wind 把自己的儿子带入到一个洞穴内,洞穴有n个房间,洞穴的道路是单向的. 每一次Wind 选择两个房间 x 和 y, 让他的儿子从一个房间走到 ...
- 搜索(DLX):HDU 3663 Power Stations
Power Stations Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- CodeForces 595A
题目链接: http://codeforces.com/problemset/problem/595/A 题意: 一栋楼,有n层,每层有m户,每户有2个窗户,问这栋楼还有多少户没有睡觉(只要一个窗户灯 ...
- 什么是Socket,为什么要用Socket
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连接 ...
- 《程序设计中的组合数学》——polya计数
我们在高中的组合数学中常常会碰到有关涂色的问题,例如:用红蓝两种颜色给正方形的四个顶点涂色,会有几种不同的方案.在当时,我们下意识的认为,正方形的四个顶点是各不相同的,即正方形是固定的.而实际上我们知 ...
- 移动端转PC --> PC跳转移动端
<script type=”text/javascript”>try {var urlhash = window.location.hash;if (!urlhash.match(“fro ...
- lantern蓝灯导致IE和一些软件不能上网解决方法
@echo offREG DELETE "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Setti ...