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

参考文档

时间: 2024-10-22 01:01:41

Hive 接口介绍(Web UI/JDBC)的相关文章

robot+selenium编写web UI自动化用例

通常我们可以用robot framework写接口自动化用例,但是有些站点如果未做前后端分离,迭代过程中又有大量的重复测试工作量,没有接口可调用验证,也有自动化测试需求,怎么办?这时候,那个深坑频现的web UI自动化就势在必行了.robot只是自动化框架,好在他稳定而且扩展性极好,要想驱动web浏览器自动干活,只需要安装另外一个神器selenium,下文将提纲携领介绍web UI如何入门,一旦你入了门,其余的就是baidu和看官网帮助的工作量了,建议用到了在查,不然也没卵用. 用例编写前提:

Web测试介绍一 UI测试

       随着Web 2.0技术的迅速发展,许多公司都开发了一些基于Web的网站服务,通常在设计开发Web应用系统的时候很难模拟出大量用户同时访问系统的实际情况,因此,当Web网站遇到访问高峰时,容易发生服务器响应速度变慢甚至服务中断.为了避免这种情况,需要一种能够真实模拟大量用户访问Web应用系统的性能测试工具进行压力测试,来测试静态HTML页面的响应时间,甚至测试动态网页(包括ASP.PHP.JSP等)的响应时间,为服务器的性能优化和调整提供数据依据. 常见的Web应用程序过程: 关键的

hive 2.3.0的web UI 的配置

用过hive的都知道,hive可以通过 web 来访问,只需在hive-site.xml配置即可,但是我在配置的时候根本没有看到很多博客中所提到的: 关于hwi的ip和port的配置项.最后去官网的更新日志 https://issues.apache.org/jira/browse/HIVE-15622 下看了下才知道 [ HIVE-15622 ] - 从Hive中删除HWI组件 hive2.3.0删除了HWI组件 !!!

专刊文章 - Web UI框架引领J2EE新开发模式 代码生成器+手工merge半智能开发

前言:随着WEB UI框架(EasyUI/Jquery UI/ExtJS/DWZ)等的逐渐成熟,系统界面逐渐实现统一化,代码生成器也可以生成统一规范的界面!代码生成+手工MERGE半智能开发将是新的趋势,单表数据模型和一对多数据模型的增删改查功能直接生成使用,可节省50%工作量,快速提高开发效率!!! jeecg微云快速开发平台 - 云桌面展示  [J2EE  Code Generation]一款基于代码生成器的J2EE智能开发框架. JAVA编程有很多重复机械代码,生成器可以帮助解决50%的重

Spark Web UI 监控详解

Spark集群环境配置 我们有2个节点,每个节点是一个worker,每个worker上启动一个Executor,其中Driver也跑在master上.每个Executor可使用的核数为2,可用的内存为2g,集群中所有Executor最大可用核数为4. conf/spark-defaults.conf 部分参数配置如下: spark.master spark://Master:7077 spark.executor.memory 2g spark.executor.cores 2 spark.co

WeX5的简单介绍及UI的简单讲解

WeX5的简单介绍及UI的简单讲解 (2016-01-13 14:49:05) 标签: it 分类: WeX5的初步自学 一.WeX5的简单讲解 1.WeX5是前端快速开发框架,可开发跨端运行应用.是移动App/微信/WebApp开发利器,一次开发多平台运行. 二.WeX5平台了解 1.菜单和工具栏 :查看API:启动Tomcat:搜索:首选项:复位透视图 2.透视图 :导入java项目:使用svn 3.模型资源 :文件对比 :新建.复制.删除:重命名文刷件新及文件夹:模型编译 切换到资源管理器

WEB UI 整理

当下对于网站前段开发人员来说,很少有人不使用一些JS框架或者WEB UI库,因此这些可以有效提高网站前段开发速度,并且能够统一开发环境,对于不同浏览器的兼容性也不需要程序员操心,有了这些优点,当然大家都会使用这些框架或库. 本文整理了国内外最全面和主流的JS框架与WEB UI库,里面有许多人已经十分熟悉,比如JQUERY.当然也有很多是陌生的,可以通过本文了解他们各自的优缺点,或许你能找到更好用的也说不定! 几乎所有的富 Web 应用都基于一个或多个 Web UI 库或框架,这些 UI 库与框架

Spring的BeanPostProcesser接口介绍

前言 废话不多说,直接进入主题. 同学们有想过这么一种情况吗:Spring容器提供给我们的一些接口实现类并不能满足我们的要求,但是我们又不想重新写一个类,只想在原来类上修改一些属性? 举个例子,SpringMVC中通过<mvc:annotation-driven>标签自动生成的RequestMappingHandlerAdapter有个HandlerMethodArgumentResolverComposite类型的argumentResolvers属性,这个属性内部有个HandlerMeth

[转] 国内外最全面和主流的JS框架与WEB UI库(强烈推荐)

国内外最全面和主流的JS框架与WEB UI库... 当下对于网站前段开发人员来说,很少有人不使用一些JS框架或者WEB UI库,因此这些可以有效提高网站前段开发速度,并且能够统一开发环境,对于不同浏览器的兼容性也不需要程序员操心,有了这些优点,当然大家都会使用这些框架或库. 本文整理了国内外最全面和主流的JS框架与WEB UI库,里面有许多人已经十分熟悉,比如JQUERY.当然也有很多是陌生的,可以通过本文了解他们各自的优缺点,或许你能找到更好用的也说不定! 几乎所有的富 Web 应用都基于一个