接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. js中的Call与apply方法

    看到同行写得不错,直接转载了...0.0  祝大家天天开心! 例子来源http://uule.iteye.com/blog/1158829

  2. War3Tool dota改键v3.3版

    wartool魔兽全屏改键功能:1.支持11平台自定义改建,自动进局域网(同类软件暂时没发现这个功能)2.技能改键,可以有效的切换适合你的技能键3.war3路径扫描,运行本程序一键就能打开war3 ( ...

  3. LVM 命令集总结

    PV 命令 下面的命令是在与物理卷相关的操作中最常用的命令: lsdev 列出ODM中的设备. chdev 修改设备的特征. mkdev 增加一个设备到系统中. chpv 修改物理卷的状态. lspv ...

  4. enigma机的原理

    注:本文修改自三思科学<ENIGMA的兴亡>            ENIGMA ENIGMA看起来是一个装满了复杂而精致的元件的盒子.不过要是我们把它打开来,就可以看到它可以被分解成相当 ...

  5. Assumptions

    理想情况下,写测试用例的开发人员可以明确的知道所有导致他们所写的测试用例不通过的地方,但是有的时候,这 些导致测试用例不通过的地方并不是很容易的被发现,可能隐藏的很深,从而导致开发人员在写测试用例时很 ...

  6. maven上传自定义jar到本地仓库

    mvn install:install-file  -Dfile=D:/baidu/ueditor-1.1.1.jar  -DgroupId=com.baidu.ueditor  -Dartifact ...

  7. N - Tram - poj1847(简单最短路)

    题意:火车从一点开到另一点,轨道上有很多岔路口,每个路口都有好几个方向(火车能够选任意一个方向开),但是 默认的是 第一个指向的方向,所以如果要选择别的方向的话得 进行一次切换操作 ,给定一个起点一个 ...

  8. Solr与Tomcat的整合

    solr与tomcat整合有两种方法: 方法一:其整合步骤如下: 1.将solr中的example中的solr拷贝到要作为服务器的位置(我当前创建的目录为D:\Develop\solr\home) 2 ...

  9. 初次了解CSS3

    什么是CSS,什么是CSS3? 非常简单,CSS代表"Casading Style Sheets",就是样式表,是一种替代并为网站添加样式的标记性语言.现在所使用的CSS基本是在1 ...

  10. ISAP 简介

    刘汝佳的蓝书上已经给出了大部分,先给上完整代码(以草地排水为例). #include<iostream> #include<algorithm> #include<cst ...