Hive 接口介绍(Web UI/JDBC)

Hive 接口介绍(Web UI/JDBC)


实验简介

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


一、实验环境说明

1. 环境登录

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

2. 环境介绍

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

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

3. 环境使用

使用GVim编辑器输入实验所需的代码,然后使用XfceTerminal命令行环境进行编译运行,查看运行结果,运行后可以截图并分享自己的实验成果,实验楼提供的截图是后台截图,无法作弊,可以真实有效证明您已经完成了实验。

实验记录页面可以在“我的课程”中查看,其中含有每次实验的截图及笔记,以及每次实验的有效学习时间(指的是在实验桌面内操作的时间,如果没有操作,系统会记录为发呆时间)。这些都是您学习的真实性证明。

4. 其他

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

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

二、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 虽然提供了可视化的查询操作,但最大的缺点就是用户不能实时了解查询的状态,交互能力较差。

三、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 两种接口有什么异同?

参考文档

  • 《Hadoop实战 第2版》陆嘉恒,机械工业出版社;
  • Hive Web接口HWI的操作及使用;
  • hive jdbc 调用;

转载于:https://www.cnblogs.com/yeahwell/p/4622842.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java最佳实践– Char到Byte和Byte到Char的转换

在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将讨论String性能调优。 特别是&#xff0c;我们将重点介绍使用默认编码时如何有效地处理字符到字节和字节到字符的转换。 本文总结了两种提议的自定义方法与两种经典方法&#xff0…

IOS-C文件的创建于初始化函数.void init() write_file()

//文件初始化 void init(){ FILE * fpNULL; fpfopen("telbook.data", "rb"); int count0; if (fpNULL) //没有这个文件就把这个文件创建出来 { fpfopen("tellbook.data", "wb"); fwrite(&count, sizeof(count), 1, fp); fclose(…

7-3 逆序的三位数 (10 分)

7-3 逆序的三位数 (10 分) 程序每次读入一个正3位数&#xff0c;然后输出按位逆序的数字。注意&#xff1a;当输入的数字含有结尾的0时&#xff0c;输出不应带有前导的0。比如输入700&#xff0c;输出应该是7。 输入格式&#xff1a; 每个测试是一个3位的正整数。 输出格式&a…

抛弃优启Grub4dos和PE大多数时间可以这样用

抛弃优启Grub4dos和PE大多数时间可以这样用 在能够进入Windows的情况下&#xff0c;Grub4dos和PE大多数时间可以这样用 http://yunpan.cn/cyuuUtUQMfmGN 提取码 c2acGrub4dos的出现颠覆了传统的EZBOOT光盘启动模式&#xff0c;很多人用grub4dos来实现优盘启动&#xff0c;同时g…

Java最佳实践–队列之战和链接的ConcurrentHashMap

在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将在四个具有相关语义的流行Queue实现类之间进行性能比较。 为了使事情变得更现实&#xff0c;我们将在多线程环境下进行测试&#xff0c;以讨论和演示如何将ArrayBlockingQueue &am…

HDU 5652 India and China Origins(二分 + BFS)

本文链接:http://www.cnblogs.com/Ash-ly/p/5398867.html 题意&#xff1a; 中国和印度之间有一片地方&#xff0c;把这片地方抽象化&#xff0c;于是就可以看成一个N * M矩阵&#xff0c;其中黑色的代表高山不能走过去&#xff0c;白色的代表平原&#xff0c;可以通行,人每次可…

C语言%.2f四舍五入

#include <stdio.h> int main() {double d 1.199;printf("%.2f", d);return 0; }输出1.20 如果不想让其四舍五入可以这样&#xff1a; #include <stdio.h> #include <math.h> int main() {double d 1.199;printf("%.2f", floor(d * 1…

关于使用racthet的push.js

racthet的push是用来跳转另外一个页面的效果的。但是必须在服务器的环境下支持。如果想要让本地html访问支持的话需要添加 转载于:https://www.cnblogs.com/djawh/p/4623925.html

休眠自动提交命令强制MySQL在过多的磁盘I / O中运行

亲爱的大家&#xff0c; 我敢肯定&#xff0c;你们中的许多人都在使用Hibernate和MySQL&#xff0c;我自己在这里和那里都使用它。 通常&#xff0c;编程模型是不错的&#xff0c;但是普通的JDBC可以快很多已经不是什么秘密了。 在这篇文章中&#xff0c;我想引起您的注意Hibe…

“应用程序无法正常启动(oxc000007b)”解决方案

解决方案1 通过“DirectX修复工具 V3.3 标准版”软件修复。 备注&#xff1a;经过测试&#xff0c;并未解决本人的问题&#xff0c;但是这个方法可能对游戏中缺失相关.dll&#xff08;动态链接库&#xff09;有帮助。 解决方案2&#xff1a; 该问题的出现不适偶然&#xff0c;主…

Linux: dev: cmake: CHECK_LIBRARY_EXISTS

文章目录 简介例子源代码最终调用到的两个命令如果结果是这里为什么不直接使用rpm查看包呢&#xff1f;需要注意的问题 简介 https://cmake.org/cmake/help/latest/module/CheckLibraryExists.html 这个方法是在Modules/CheckLibraryExists.cmake文件里定义的一个宏。 最终使用…

7-15 计算圆周率 (15 分)

根据下面关系式&#xff0c;求圆周率的值&#xff0c;直到最后一项的值小于给定阈值。 输入格式&#xff1a; 输入在一行中给出小于1的阈值。 输出格式&#xff1a; 在一行中输出满足阈值条件的近似圆周率&#xff0c;输出到小数点后6位。 输入样例&#xff1a; 0.01结尾无…

Struts2的全局结果视图的配置

1.在struts.xml中的package标签内添加<global-results/>标签&#xff0c;将全局结果加进该标签内&#xff0c;只适用于当前包下。 <package name"customer" namespace"/customer" extends"struts-default" > <global-results>…

长大了Java! 提出Java桌面版

不&#xff0c;这不是另一个“ Java已死”的咆哮。 Java非常活跃。 它是可用的最佳开发和运行时平台之一。 迄今为止&#xff0c;最稳定的平台。 那可能只是它最大的祸根。 荒谬&#xff01; 稳定性如何&#xff1f; 你可能会问。 好吧&#xff0c;由于它&#xff0c;您可以看到…

[算法练习]Excel Sheet Column Title

题目&#xff1a; Given a positive integer, return its corresponding column title as appear in an Excel sheet. For example: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB 代码&#xff1a; class Solution { public: string convertToTitle(…

7-16 求符合给定条件的整数集 (15 分)

给定不超过6的正整数A&#xff0c;考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。 输入格式&#xff1a; 输入在一行中给出A。 输出格式&#xff1a; 输出满足条件的的3位数&#xff0c;要求从小到大&#xff0c;每行6个整数。整数间以空格分隔&#…

JUnit学习之hamcrest、testSuite介绍及测试原则

[转自] http://huihai.iteye.com/blog/1994270 上一节说了junit的一些基本概念&#xff0c;主要使用assert做一些基本的判断。但很多时候使用assert做判断&#xff0c;并不方便&#xff0c;如果要判断某几个值是否为true或false&#xff0c;这时使用hamcrest来判断就会方便许多…

Java最佳实践– Vector vs ArrayList vs HashSet

在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将在三个最常用的Collection实现类之间进行性能比较。 为了使事情变得更现实&#xff0c;我们将在多线程环境下进行测试&#xff0c;以讨论和演示如何将Vector &#xff0c; ArrayLi…

iOS:图片上传时两种图片压缩方式的比较

上传图片不全面的想法&#xff1a;把图片保存到本地,然后把图片的路径上传到服务器&#xff0c;最后又由服务器把路径返回&#xff0c;这种方式不具有扩展性&#xff0c;如果用户换了手机&#xff0c;那么新手机的沙盒中就没有服务器返回的图片路径了&#xff0c;此时就无法获取…

7-17 爬动的蠕虫 (15 分)

一条蠕虫长1寸&#xff0c;在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸&#xff0c;但必须休息1分钟才能接着往上爬。在休息的过程中&#xff0c;蠕虫又下滑了D寸。就这样&#xff0c;上爬和下滑重复进行。请问&#xff0c;蠕虫需要多长时间才能爬出井&#xff1f;…