通过hiveserver远程服务构建hive web查询分析工具
(1)hive 三种启动方式及用途,本文主要关注通过hiveserver(可jdbc连接)的方式启动
1, hive 命令行模式,直接输入/hive/bin/hive的执行程序,或者输入 hive --service cli
用于linux平台命令行查询,查询语句基本跟mysql查询语句类似
2, hive web界面的启动方式,hive --service hwi
用于通过浏览器来访问hive,提供基本的基于web的hive查询服务,可以看作是hive数据平台的demo,
具体用法可见:http://www.cnblogs.com/gpcuster/archive/2010/02/25/1673480.html 使用HIVE的WEB界面:HWI
3, hive 远程服务 (端口号10000) 启动方式,nohup ./hive --service hiveserver >/dev/null 2>/dev/null &
用java等程序实现通过jdbc等驱动的方式访问hive就用这种起动方式了,这个是程序员最需要的方式了。
开源工具phphiveadmin就采用的这种方式,这种方式其实启动了一个 Hive Thrift Server ,允许你使用任意语言
与hive server通信,所以如果你不会java,语言将不会成为问题。
(2)给出一个基于hiveserver的demo,这个demo可以扩展成一个基于web操作hive的离线分析工具,类似phphiveadmin。
1、demo部署路径如下:
注:开发环境:myeclipse 8.5, tomcat 6.0
2、code:
2.1 HiveTestCase.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HiveTestCase {
public static void main(String[] args) throws Exception {
String querySQL = "SELECT a.name, a.id, a.sex FROM com58 a where a.id > 100 and a.id < 110 and sex='male'";
hive2Txt(querySQL);
}
private static void hive2Txt(String querySQL)
throws ClassNotFoundException, SQLException {
Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
// String dropSQL = "drop table com58";
// 1 male 29 3d649ecc 3d649ecc@qq.com 20110304 20110402
// 1.id 2.sex 3.age 4.name 5.mail 6.sDate 7.eDate
// String createSQL =
// "create table com58 (id int, sex string, age int, name string, mail string, sDate bigint, eDate bigint) row format delimited fields terminated by ' '";
// hive插入数据支持两种方式一种:load文件,令一种是 CTAS(create table as select...
// 从另一个表中查询进行插入)
// hive是不支持insert into...values(....)这种操作的
// String insterSQL =
// "LOAD DATA LOCAL INPATH '/home/june/hadoop/hadoop-0.20.203.0/tmp/1.txt' OVERWRITE INTO TABLE com58";
Connection con = DriverManager.getConnection(
"jdbc:hive://localhost:10000/default", "", "");
Statement stmt = con.createStatement();
// stmt.executeQuery(dropSQL); // 执行删除语句
// stmt.executeQuery(createSQL); // 执行建表语句
// stmt.executeQuery(insterSQL); // 执行插入语句
ResultSet res = stmt.executeQuery(querySQL); // 执行查询语句
while (res.next()) {
System.out.println("name:t" + res.getString(1) + "tid:t"
+ res.getString(2) + "tsex:t" + res.getString(3));
}
}
}
2.2 hiveSelect.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.util.*"%>
<%@page
import="java.io.File,
java.io.FileWriter,
java.io.IOException,
java.sql.Connection,
java.sql.DriverManager,
java.sql.ResultSet,
java.sql.SQLException,
java.sql.Statement"%>
<%
Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
String table = request.getParameter("table");
String querySQL = "select * from " + table + " limit 10";
Connection con = DriverManager.getConnection(
"jdbc:hive://localhost:10000/default", "", "");
Statement stmt = con.createStatement();
// stmt.executeQuery(dropSQL); // 执行删除语句
// stmt.executeQuery(createSQL); // 执行建表语句
// stmt.executeQuery(insterSQL); // 执行插入语句
ResultSet res = stmt.executeQuery(querySQL); // 执行查询语句
FileWriter fw = new FileWriter("/home/june/a.txt");
while (res.next()) {
System.out.println("name:t" + res.getString(1) + "tid:t"
+ res.getString(2) + "tsex:t" + res.getString(3));
fw.write("name:t" + res.getString(1) + "tid:t"
+ res.getString(2) + "tsex:t" + res.getString(3)
+ "n");
}
fw.flush();
fw.close();
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
2.3 select.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<html>
<head>
<title>Hive Web Interface-Create a Hive Session</title>
</head>
<body>
<table>
<tr>
<td valign="top">
<h2>
select hive table to file.
</h2>
<form action="hiveSelect.jsp">
<table border="1">
<tr>
<td>
Session Name
</td>
<td>
<input type="text" name="table" value="table">
</td>
</tr>
<tr>
<td colSpan="2">
<input type="submit">
</td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</body>
</html>
</html>
2.4 最后的结果是在相应的路径下创建一个文件输出,后续你可以用javaMail做一个邮件提醒+下载链接的功能,这样一个简易的基于hive的web分析工具就完工了。
REF:
http://blog.csdn.net/a221133/article/details/6734762
http://blog.csdn.net/a221133/article/details/6734746
官方站点:
HiveClient
https://cwiki.apache.org/Hive/hiveclient.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法