接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》 详解的更多相关文章

  1. Spring4 JDBC详解

    Spring4 JDBC详解 在之前的Spring4 IOC详解 的文章中,并没有介绍使用外部属性的知识点.现在利用配置c3p0连接池的契机来一起学习.本章内容主要有两个部分:配置c3p0(重点)和 ...

  2. JDBC详解(一)

    一.相关概念介绍 1.1.数据库驱动 这里驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理 ...

  3. JDBC详解1

    JDBC详解1 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中u ...

  4. JavaScript进阶内容——DOM详解

    JavaScript进阶内容--DOM详解 当我们已经熟练掌握JavaScript的语法之后,我们就该进入更深层次的学习了 首先我们思考一下:JavaScript是用来做什么的? JavaScript ...

  5. JavaScript进阶内容——BOM详解

    JavaScript进阶内容--BOM详解 在上一篇文章中我们学习了DOM,接下来让我们先通过和DOM的对比来简单了解一下BOM 首先我们先来复习一下DOM: 文档对象模型 DOM把文档当作一个对象来 ...

  6. ASP.NET MVC 5 学习教程:生成的代码详解

    原文 ASP.NET MVC 5 学习教程:生成的代码详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...

  7. JDBC详解系列(二)之加载驱动

    ---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)---   在JDBC详解系列(一)之流程中 ...

  8. JDBC详解系列(三)之建立连接(DriverManager.getConnection)

      在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤. JDBC流程: 第一步:加载Driver类,注册数据库驱动: 第二步:通过DriverManager,使用url,用户名和密码 ...

  9. IP地址和子网划分学习笔记之《IP地址详解》

    2018-05-03 18:47:37   在学习IP地址和子网划分前,必须对进制计数有一定了解,尤其是二进制和十进制之间的相互转换,对于我们掌握IP地址和子网的划分非常有帮助,可参看如下目录详文. ...

  10. OpenCV学习C++接口 Mat像素遍历详解

    OpenCV学习C++接口 Mat像素遍历详解

随机推荐

  1. 「Poetize8」Divisible

    描述 Description 设F[i]为斐波那契数列的第i项,F[1]=1,F[2]=1,F[i]=F[i-1]+F[i-2](i>=3). 输入格式 InputFormat 输入包含若干行( ...

  2. 图论(网络流):[SDOI2010] 星际竞速

    Description 10 年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一,夺得这个项目的冠军无疑是很多人的梦想,来自杰森座 α星的悠悠也是其中之一. 赛车大赛的赛场由 N 颗行星和M ...

  3. select的使用(一)

    单表操作 select Name,Major,InDate from T_Employee as 计算结果 select Name as 姓名,Major,InDate from T_Employee ...

  4. 工作中常用的QTP操作Excel函数

    前言 本文只是对工作中常用的EOM相关函数的整理,并不是要写个大而全的操作手册,如果想对EOM有更多的了解可以参考QTP的帮助文档或查看QTP安装目录\CodeSamplesPlus\UsingExc ...

  5. 《University Calculus》-chaper8-无穷序列和无穷级数-比值审敛法

    在分析等比级数的过程中,我们发现对于q<1的等比级数是收敛的,它表示级数每一项与它前一项的比值小于1,我们能否将这种方法推广起来用于一般级数的审敛呢? 从极限的定义出发:

  6. 《Mathematical Olympiad——数论》——整除

    数论这个东西吧,虽说也是高中IMOer玩的数学游戏,颇具美学性的证明比较多.就目前所知,它在算法里是一些加密技术的基础,不多言,开始具体题目的分析. 问题一:已知数列{an},且a0 = 2 , a1 ...

  7. Cookie介绍及JavaScript操作Cookie方法详解

    本文主要为大家简单介绍了以下Cookie的用途.运行机制,以及JavaScript操作Cookie的各种方法,总结的比较全面,希望能给大家带来帮助. 什么是 Cookie “cookie 是存储于访问 ...

  8. Linux下报 java.net.SocketException权限不够 异常解决

    转载自:http://wangchongan.com/articles/java-net-socket-exception-permission-denied.html 今天在Linux下用Jetty ...

  9. winform combobox控件绑定 分类: WinForm 2014-04-17 14:34 118人阅读 评论(0) 收藏

    想要达到的效果:把数据库中的一列数据绑定到combobox控件中. 数据库表:T_Task//任务表 列名:Task_Name//名称 主键:Task_ID combobox控件名称:cbName 解 ...

  10. 通过cocos2d-x的CCGLProgram和CCShaderCache的实现来分析OpenGL ES中的Shader编程

    在OpenGL ES中,Shader是着色器,包括两种:顶点着色器(Vertex Shader)和片元着色器(Fragment Shader).每个program对象有且仅有一个Vertex Shad ...