通过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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

知识分享:详解Hadoop核心架构

  通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖...

21750
来自专栏FreeBuf

CIA Vault7泄露文档第五波:多平台入侵植入和管理控制工具HIVE

最近,NSA和CIA的网络武器都被捅娄子了,4月14日,就在ShadowBroker公布第二批NSA网络大杀器的同一天,维基解密继续公布了Vault7系列名为H...

26490
来自专栏企鹅号快讯

如何使用java代码通过JDBC访问Sentry环境下的Hive

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproje...

30690
来自专栏数据之美

Zookeeper 原理与实践

1、Zookeeper 的由来 在Hadoop生态系统中,许多项目的Logo都采用了动物,比如 Hadoop 和 Hive 采用了大象的形象,HBase 采用了...

1.1K80
来自专栏CSDN技术头条

从底层到应用,大数据工程师成长之路必备技能汇总

概述:谨以此文献给对数据有热情,想长期从事此行业的年轻人,希望对你们有所启发,并快速调整思路和方向,让自己的职业生涯有更好的发展。 根据数据应用的不同阶段,我将...

37190
来自专栏搜云库

Apache Hive-2.3.0 快速搭建与使用

Hive 简介 Hive 是一个基于 hadoop 的开源数据仓库工具,用于存储和处理海量结构化数据。它把海量数据存储于 hadoop 文件系统,而不是数据库,...

52960
来自专栏CSDN技术头条

漫谈千亿级数据优化实践:一次数据优化实录

即使没有数据倾斜,千亿级的数据查询对于系统也是一种巨大负担,对于数据开发来说,如何来优化它,既是挑战,也是机遇!

542100
来自专栏CSDN技术头条

Hadoop、Hive、Spark 之间是什么关系?

大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。你可以把它比作一个厨房所以需要的各种工具。锅碗瓢...

2.6K80
来自专栏CSDN技术头条

对比Pig、Hive和SQL,浅看大数据工具之间的差异

【编者按】在笔者看来,语言和工具之争从来都没有太大的意义,所谓存在既有道理,如何在场景下做出最合适的选择才至关重要。本文,DeZyre公司专家Manisha N...

63780
来自专栏企鹅号快讯

大数据处理必备的十大工具!

大数据的日益增长,给企业管理大量的数据带来了挑战的同时也带来了一些机遇。下面是用于信息化管理的大数据工具列表: 1.ApacheHive ? Hive是一个建立...

27870

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励