Hive 接口介绍(Web UI/JDBC)

Hive 接口介绍(Web UI/JDBC)


实验简介

本次实验学习 Hive 的两种接口:Web UI 以及 JDBC。html


1、实验环境说明

1. 环境登陆前端

无需密码自动登陆,系统用户名shiyanlou,密码shiyanloujava

2. 环境介绍web

本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序:sql

  • XfceTerminal: Linux命令行终端,打开后会进入Bash环境,可使用Linux命令;
  • Firefox:浏览器,能够用在须要前端界面的课程里,只须要打开环境里写的HTML/JS页面便可;
  • GVim:很是好用的编辑器,最简单的用法能够参考课程Vim编辑器
  • Eclipse:Eclipse是著名的跨平台的自由集成开发环境(IDE)。主要用来Java语言开发,可是目前亦有人经过插件使其做为C++和Python等语言的开发工具。

3. 环境使用数据库

使用GVim编辑器输入实验所需的代码,而后使用XfceTerminal命令行环境进行编译运行,查看运行结果,运行后能够截图并分享本身的实验成果,实验楼提供的截图是后台截图,没法做弊,能够真实有效证实您已经完成了实验。apache

实验记录页面能够在“个人课程”中查看,其中含有每次实验的截图及笔记,以及每次实验的有效学习时间(指的是在实验桌面内操做的时间,若是没有操做,系统会记录为发呆时间)。这些都是您学习的真实性证实。浏览器

4. 其余ruby

以前的实验中,咱们使用的是 Hadoop V2.4.1版本。 咱们在测试的时候,发现 Hive V1.1.0 在进行 Session 查询的时候须要 Hadoop V2.6 以上版本,所以本次实验的 Hadoop 版本基于 V2.6.0 版本。因为已经修改 Hadoop 目录、Hive 目录为普通权限,若是提示 hadoop 或 hive 为无效命令,请 source /etc/profile 来使配置文件生效。bash

Hadoop 目录为 : /usr/local/hadoop-2.6.0 Hive 目录为: /usr/local/hive-1.1.0

2、Hive 网络接口(Web UI)

(1)Web UI 简介

Hive Web UI 提供了图像化的操做界面,经过 Hive Web UI 接口能够更方便、更直观地操做,特别是对刚刚接触 Hive 的用户来讲。Hive Web UI 具备一下特性:

分离查询的执行

在命令行(CLI)下,要执行多个查询就得打开多个终端,而经过Web UI,就能够同时执行多个查询,还能够在网络服务器上管理会话 Session。

不依赖本地 Hive

用户须要安装本地 Hive,就能够经过网络浏览器访问 Hive 并进行相关操做。若是想经过 Web 与 Hadoop 以及 Hive 交互,那么须要访问多个端口。

(2)配置 hive-site.xml

修改 $HIVE_HOME/conf 目录下的 hive-site.xml 文件。

咱们能够看一下默认配置是什么:

图片描述信息

咱们只须要修改 hive.hwi.war.file,你应该先在$HIVE_HOME/lib 目录下检查一下 hwi 的版本:

图片描述信息

结果使人吃惊的是,竟然没有那个 war 文件! 只有一个同名的 jar 包,没有 war 文件。解决办法是自行下载对应 Hive 的源码包再打包成 war 文件。

下载 Hive 源码(注意这里是 src 包,不是 bin 包。上次咱们使用的是 1.1.0 版本)

$ wget http://labfile.oss.aliyuncs.com/apache-hive-1.1.0-src.tar.gz 

解压:

$ tar zxvf apache-hive-1.1.0.src.tar.gz 

再进入 hwi 目录,打包 war 文件(注意命令末尾有一个点.):

$ cd apache-hive-1.1.0-src/hwi $ jar cvfM0 hive-hwi-1.1.0.war -C web/ . 

打包完成后,有了咱们须要的 war 文件,再复制到 $HIVE_HOME/lib 目录下:

$ cp hive-hwi-1.1.0.war /usr/local/hive-1.1.0/lib 

另外咱们还须要拷贝一个 Java 的 tools.jar 到 $HIVE_HOME/lib 目录下:

$ cp /usr/local/jdk1.7.0_67/lib/tools.jar /usr/local/hive-1.1.0/lib 

不然会出现相似于下面的错误(由于 JAVA_HOME 指到$JAVA_HOME/jre 下了,而其 lib下的 tools.jar 跟$JAVA_HOME/lib/tools.jar 不同,编译的时候须要用到后者):

图片描述信息

最后,咱们将 hive-site.xml 文件修改成:

<property> <name>hive.hwi.war.file</name> <value>/lib/hive-hwi-1.1.0.war</value> <description>This sets the path to the HWI war file, relative to ${HIVE_HOME}. </description> </property> 

(3)启动 hwi

在 $HIVE_HOME/bin 目录下,启动 hwi(因为咱们以前已经修改了 Derby 为 MySQL 数据库,因此在启动 hwi 以前,请确保 MySQL 和 Hadoop 已经成功启动):

$ hive --service hwi 

图片描述信息

如今,咱们能够在浏览器中打开网络接口的地址:localhost:9999/hwi, 启动成功:

图片描述信息

(4)Web UI 操做实例

数据库及表信息查询

在查询以前,咱们先新建一个 person表 以方便后续的查询操做。启动 Hive 后,输入以下命令(这个 table 只是一个示例,你能够根据须要本身建立其余的):

图片描述信息

新建一个 txt 文件(路径自定义,好比我是 /home/hadoop/hive/person.txt),写一些示例数据,数据之间是以 \t 划分的;实验中已经写好,直接导入便可:

图片描述信息

再把数据导入到 person表 中:

图片描述信息

单击 Browse Schema 能够查看当前 Hive 中的数据库,显示的是当前能够是使用的数据库信息,只包含一个默认数据库(default):

图片描述信息

再单击 default 就能够看到 default 数据库中包含的全部表的信息了(这里有咱们刚刚新建的 table : person表):

图片描述信息

点击 person 表便可看到具体信息。

图片描述信息

Hive Session 查询

在进行查询以前咱们须要新建一个 Session(注意每次重启hwi后,以前的 Session 将会失效)。点击 Create Session 来新建:

图片描述信息

填入如下信息,打框的必填:

图片描述信息

其中: Result File 为最后的查询结果文件;

Query 为你的查询语句;

Start Query 设为 YES,表示开始查询;

点击 Submit 提交后,便可看到 View File:

图片描述信息

点击 View File 便可看到最后的查询结果:

图片描述信息

经过以上的学习,咱们能够了解到 Web UI 虽然提供了可视化的查询操做,但最大的缺点就是用户不能实时了解查询的状态,交互能力较差。

3、JDBC

在 Eclipse 中新建一个 Java 工程,例如 HiveJdbc. 而后添加所须要的 jar 包,右击工程,依次选择 Properties -> Java Build Path -> Libraries -> Add External Jars 来添加。所需 jar 包以下(如不清楚你能够直接添加全部的 jar 包;遇到没有权限添加的,请拷贝 jar 包到其余有权限的目录再添加,实验中已经拷贝到 /home/hadoop/hive):

图片描述信息

新建包和类,添加以下代码:

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveJdbc { private static String driverName = "org.apache.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { try { Class.forName(driverName); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } Connection con = DriverManager.getConnection( "jdbc:hive2://localhost:10000/default", "", ""); Statement stmt = con.createStatement(); String tableName = "hive_jdbc"; stmt.execute("drop table if exists " + tableName); stmt.execute("create table " + tableName + " (key int, value string)"); System.out.println("Create table success!"); // show tables String sql = "show tables '" + tableName + "'"; System.out.println("Running: " + sql); ResultSet res = stmt.executeQuery(sql); if (res.next()) { System.out.println(res.getString(1)); } // describe table sql = "describe " + tableName; System.out.println("Running: " + sql); res = stmt.executeQuery(sql); while (res.next()) { System.out.println(res.getString(1) + "\t" + res.getString(2)); } sql = "select * from " + tableName; res = stmt.executeQuery(sql); while (res.next()) { System.out.println(String.valueOf(res.getInt(1)) + "\t" + res.getString(2)); } sql = "select count(1) from " + tableName; System.out.println("Running: " + sql); res = stmt.executeQuery(sql); while (res.next()) { System.out.println(res.getString(1)); } } } 

从上述代码能够看出,在进行查询以前须要作的工做有:

  • 经过 Class.ForName("org.apache.hive.jdbc.HiveDriver"); 来注册 Hive 驱动;

  • 经过 Connection con = DriverManager.getConnection( "jdbc:hive2://localhost:10000/default", "", ""); 来与 Hive 数据库创建链接;

运行以前须要启动 hiveserver,但目前 Hive 摒弃了 hiveserver 转而改用了 hiveserver2,反映在代码中有两点不一样。一是,driverName由 org.apache.hadoop.hive.jdbc.HiveDriver改为了 org.apache.hive.jdbc.HiveDriver ;二是,Connection 由 jdbc:hive://localhost:10000/default 改为了 jdbc:hive2://localhost:10000/default

所以,在运行程序前启动 hiveserver 也改为了启动 hiveserver2,在 $HIVE_HOME/bin 目录下来启动。

图片描述信息

最后程序运行结果以下:

图片描述信息

做业

Web UI 和 JDBC 两种接口有什么异同?

参考文档

相关文章
相关标签/搜索