Hive有三种使用方式——CLI命令行,HWI(hie web interface)浏览器 以及 Thrift客户端连接方式。

1、hive  命令行模式

直接输入/hive/bin/hive的执行程序,或者输入 hive –service cli
       用于linux平台命令行查询,查询语句基本跟MySQL查询语句类似

2、hive  web界面的启动方式

hive –service hwi  用于通过浏览器来访问hive

如果lib目录下没有hive-hwi-{version}.war包,我们要自己打包

官网下载源码包(比如1.10版本)

解压

$ 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.listen.host</name><value>0.0.0.0</value><description>监听的地址</description></property><property><name>hive.hwi.listen.port</name><value>9999</value><description>监听的端口号</description></property><property><name>hive.hwi.war.file</name><value>lib/hive-hwi-1.1.0.war</value><description>war包所在的地址,注意这里不支持绝对路径,坑!</description></property>

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

nohup bin/hive --service hwi > /dev/null 2> /dev/null &

web访问

我们可以在浏览器中打开网络接口的地址:localhost:9999/hwi, 启动成功

3、jdbc远程连接hiveserver2

在之前的学习和实践Hive中,使用的都是CLI或者hive –e的方式,该方式仅允许使用HiveQL执行查询、更新等操作,并且该方式比较笨拙单一。幸好Hive提供了轻客户端的实现,通过HiveServer或者HiveServer2,客户端可以在不启动CLI的情况下对Hive中的数据进行操作,两者都允许远程客户端使用多种编程语言如Java、Python向Hive提交请求,取回结果。HiveServer或者HiveServer2都是基于Thrift的,但HiveSever有时被称为Thrift
server,而HiveServer2却不会。既然已经存在HiveServer为什么还需要HiveServer2呢?这是因为HiveServer不能处理多于一个客户端的并发请求,这是由于HiveServer使用的Thrift接口所导致的限制,不能通过修改HiveServer的代码修正。因此在Hive-0.11.0版本中重写了HiveServer代码得到了HiveServer2,进而解决了该问题。HiveServer2支持多客户端的并发和认证,为开放API客户端如JDBC、ODBC提供了更好的支持。

配置

<property><name>hive.metastore.warehouse.dir</name><value>/usr/hive/warehouse</value>               //(hive中的数据库和表在HDFS中存放的文件夹的位置)<description>location of default database for the warehouse</description>
</property>
<property><name>hive.server2.thrift.port</name><value>10000</value>                               //(HiveServer2远程连接的端口,默认为10000)<description>Port number of HiveServer2 Thrift interface.Can be overridden by setting $HIVE_SERVER2_THRIFT_PORT</description>
</property><property><name>hive.server2.thrift.bind.host</name><value>**.**.**.**</value>                          //(hive所在集群的IP地址)<description>Bind host on which to run the HiveServer2 Thrift interface.Can be overridden by setting $HIVE_SERVER2_THRIFT_BIND_HOST</description>
</property>
<property><name>hive.server2.long.polling.timeout</name><value>5000</value>                                // (默认为5000L,此处修改为5000,不然程序会报错)<description>Time in milliseconds that HiveServer2 will wait, before responding to asynchronous calls that use long polling</description>
</property>
<property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>  //(Hive的元数据库,我采用的是本地Mysql作为元数据库)<description>JDBC connect string for a JDBC metastore</description>
</property><property>                         <name>javax.jdo.option.ConnectionDriverName</name>          //(连接元数据的驱动名)<value>com.mysql.jdbc.Driver</value><description>Driver class name for a JDBC metastore</description>
</property>
<property><name>javax.jdo.option.ConnectionUserName</name>             //(连接元数据库用户名)<value>hive</value><description>username to use against metastore database</description>
</property><property><name>javax.jdo.option.ConnectionPassword</name>             // (连接元数据库密码)<value>hive</value><description>password to use against metastore database</description>
</property>

先启动元数据库,在命令行中键入:hive --service metastore &

接下来开启hiveserver2服务:
在命令行中键入:hive --service hiveserver2 &
注意查看日志是否报错。

javaapi操作hive实例

package com.berg.hive.test1.api;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;  import org.apache.log4j.Logger;  /** * Hive的JavaApi *  * 启动hive的远程服务接口命令行执行:hive --service hiveserver & *  * @author 汤高 *  */
public class HiveJdbcCli {  //网上写 org.apache.hadoop.hive.jdbc.HiveDriver ,新版本不能这样写private static String driverName = "org.apache.hive.jdbc.HiveDriver";  //这里是hive2,网上其他人都写hive,在高版本中会报错private static String url = "jdbc:hive2://master:10000/default"; private static String user = "hive";  private static String password = "hive";  private static String sql = "";  private static ResultSet res;  private static final Logger log = Logger.getLogger(HiveJdbcCli.class);  public static void main(String[] args) {  Connection conn = null;  Statement stmt = null;  try {  conn = getConn();  stmt = conn.createStatement();  // 第一步:存在就先删除  String tableName = dropTable(stmt);  // 第二步:不存在就创建  createTable(stmt, tableName);  // 第三步:查看创建的表  showTables(stmt, tableName);  // 执行describe table操作  describeTables(stmt, tableName);  // 执行load data into table操作  loadData(stmt, tableName);  // 执行 select * query 操作  selectData(stmt, tableName);  // 执行 regular hive query 统计操作  countData(stmt, tableName);  } catch (ClassNotFoundException e) {  e.printStackTrace();  log.error(driverName + " not found!", e);  System.exit(1);  } catch (SQLException e) {  e.printStackTrace();  log.error("Connection error!", e);  System.exit(1);  } finally {  try {  if (conn != null) {  conn.close();  conn = null;  }  if (stmt != null) {  stmt.close();  stmt = null;  }  } catch (SQLException e) {  e.printStackTrace();  }  }  }  private static void countData(Statement stmt, String tableName)  throws SQLException {  sql = "select count(1) from " + tableName;  System.out.println("Running:" + sql);  res = stmt.executeQuery(sql);  System.out.println("执行“regular hive query”运行结果:");  while (res.next()) {  System.out.println("count ------>" + res.getString(1));  }  }  private static void selectData(Statement stmt, String tableName)  throws SQLException {  sql = "select * from " + tableName;  System.out.println("Running:" + sql);  res = stmt.executeQuery(sql);  System.out.println("执行 select * query 运行结果:");  while (res.next()) {  System.out.println(res.getInt(1) + "\t" + res.getString(2));  }  }  private static void loadData(Statement stmt, String tableName)  throws SQLException {  //目录 ,我的是hive安装的机子的虚拟机的home目录下String filepath = "user.txt";  sql = "load data local inpath '" + filepath + "' into table "  + tableName;  System.out.println("Running:" + sql);  stmt.execute(sql);  }  private static void describeTables(Statement stmt, String tableName)  throws SQLException {  sql = "describe " + tableName;  System.out.println("Running:" + sql);  res = stmt.executeQuery(sql);  System.out.println("执行 describe table 运行结果:");  while (res.next()) {  System.out.println(res.getString(1) + "\t" + res.getString(2));  }  }  private static void showTables(Statement stmt, String tableName)  throws SQLException {  sql = "show tables '" + tableName + "'";  System.out.println("Running:" + sql);  res = stmt.executeQuery(sql);  System.out.println("执行 show tables 运行结果:");  if (res.next()) {  System.out.println(res.getString(1));  }  }  private static void createTable(Statement stmt, String tableName)  throws SQLException {  sql = "create table "  + tableName  + " (key int, value string)  row format delimited fields terminated by '\t'";  stmt.execute(sql);  }  private static String dropTable(Statement stmt) throws SQLException {  // 创建的表名  String tableName = "testHive";  sql = "drop table  " + tableName;  stmt.execute(sql);  return tableName;  }  private static Connection getConn() throws ClassNotFoundException,  SQLException {  Class.forName(driverName);  Connection conn = DriverManager.getConnection(url, user, password);  return conn;  }  }  

Hive之 hive的三种使用方式(CLI、HWI、Thrift)相关推荐

  1. 详解:Hive的MetaStore和三种配置方式

    一:Metadata概念: 元数据包含用Hive创建的database.table等的元信息.元数据存储在关系型数据库中.如Derby.MySQL等. 二:Metastore作用: 客户端连接meta ...

  2. Hive metastore三种配置方式

    Hive的meta数据支持以下三种存储方式,其中两种属于本地存储,一种为远端存储.远端存储比较适合生产环境.Hive官方wiki详细介绍了这三种方式,链接为:Hive Metastore. 一.本地d ...

  3. hive安装测试及Hive 元数据的三种存储方式

    一  hive安装测试 1.下载解压 tar -xf hive-x.y.z.tar.gz(本次安装为hive-0.8.1.tar.gz) 将解压后的hive-0.8.1文件放在系统的/home/had ...

  4. java servlet接口开发_servlet三种实现方式之一实现servlet接口

    servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第一种示例代码如下(已去掉包名): import ...

  5. mysql几种安装方法_mysql的三种安装方式(详细)

    安装MySQL的方式常见的有三种: rpm包形式 通用二进制形式 源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL官方提供的(版本更新,修复了更多常见BUG)www.mys ...

  6. MyEclipse网站服务器,MyEclipse中web服务器的三种配置方式

    初学Javaweb开发的人们都会遇到一个问题,就是服务器环境的搭建配置问题.下面介绍三种服务器的搭建方式. 直接修改server.xml文件 当你写了一个web应用程序(jsp/servlet),想通 ...

  7. python数据结构与算法:二叉树及三种遍历方式(先序遍历/中序遍历/后序遍历)

    树的实现采用queue的形式: 树的三种遍历方式(广度优先白能力法):先序遍历(根左右),中序遍历(左根右)以及后序遍历(左右根) ######################P6.4 数据结构### ...

  8. FPGA之道(41)HDL的三种描述方式

    文章目录 前言 三种描述方式 结构化描述方式 数据流描述方式 行为级描述方式 前言 常编写Verilog代码的就会知道,我们对于某一功能的描述,可以通过门电路来描述,也可以直接描述其功能等,这就牵扯到 ...

  9. 【 Verilog HDL 】HDL的三种描述方式

    当我们使用HDL代码描述硬件功能的时候,主要有三种基本描述方式,即结构化描述方式.数据流描述方式和行为级描述方式.通过本次总结,我们将明白到底我们描述的电路是什么方式描述的. 结构化描述方式 结构化描 ...

  10. oracle if=,oracle中if/else的三种实现方式详解

    1.标准sql规范 1.单个IF IF v=... THEN END IF; 2.IF ... ELSE IF v=... THEN ELSE t....; END IF; 3.多个IF IF v=. ...

最新文章

  1. 双极性信号、正交信号和PAM信号通信系统仿真
  2. 阿里云域名注册和虚拟云主机
  3. 关于如如何运行tensorrt
  4. c语言源程序由将其转换为目标程序,将C语言编写的源程序转换为目标程序的软件属于______。...
  5. 如何下载EP的各个版本?
  6. 为什么年龄大了近视还增加_年龄明明一样大,为什么有人长得年轻,有人显老呢?...
  7. 边缘检测robert原理_机器视觉尺寸检测基础
  8. C++ STL list删除和修改
  9. Mysql 排序null值 排序问题分析
  10. 17.异常(三)之 e.printStackTrace()介绍
  11. Xfce4里添加登录后程序自动运行
  12. ssh框架原理及工作流程
  13. 六维空间向量表示法公式笔记
  14. 推荐系统 | (4) 可解释推荐系统---知其然,知其所以然
  15. Buck电路工作原理
  16. 解决redisson超时org.redisson.client.RedisResponseTimeoutException: Redis server response timeout
  17. Windows 32位下cocos2d-x2.2.0Android环境搭建
  18. 2021年全球高级相变材料(PCM)收入大约1513.7百万美元,预计2028年达到3220.4百万美元
  19. 【python脚本】linux中编写运行python脚本
  20. 数据库异常:无效的授权说明 [ 0x80040e4d ]

热门文章

  1. Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决(转)...
  2. Cognos访问权限之让拒绝更友善
  3. 利用appscan进行自动化定期安全测试
  4. EOS project 中 的一个 jsp 文件中 调用 javascript函数的问题
  5. 【Scala】使用Scala语言定义函数和函数使用(比较两个数的大小代码)
  6. 设计模式之单例模式8种实现方式,其四:懒汉式(线程安全,同步方法)
  7. 安装mysql需要配置什么软件_软件配置篇-MySQL下载及安装
  8. CSS 奇技淫巧:动态高度过渡动画
  9. 前端常用插件、工具类库汇总,新手必收藏!!!
  10. 这10个实用的Javascript调试技巧,你知道吗?