iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >hive的使用方式有几种
  • 234
分享到

hive的使用方式有几种

2023-06-03 02:06:16 234人浏览 泡泡鱼
摘要

这篇文章主要为大家展示了“Hive的使用方式有几种”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“hive的使用方式有几种”这篇文章吧。Hive有三种使用方式——CLI命令行,HWI(hie WE

这篇文章主要为大家展示了“Hive的使用方式有几种”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“hive的使用方式有几种”这篇文章吧。

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

hive  命令行模式

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

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 之前,请确保 mysqlhadoop 已经成功启动):

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

web访问

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

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;    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的使用方式有几种”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: hive的使用方式有几种

本文链接: https://www.lsjlt.com/news/232283.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • hive的使用方式有几种
    这篇文章主要为大家展示了“hive的使用方式有几种”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“hive的使用方式有几种”这篇文章吧。Hive有三种使用方式——CLI命令行,HWI(hie we...
    99+
    2023-06-03
  • hive存储格式有几种
    这篇文章主要介绍了hive存储格式有几种,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。hive的存储格式通常是三种:textfile 、 sequencefile 、 rcf...
    99+
    2023-06-02
  • Hive表的几种存储格式
    Hive的文件存储格式: textFile     textFile为默认格式     存储方式:行存储         缺点:磁盘开销大;数据解析开销大;压缩的text文件,hive无法进行合并和拆分 sequencefile  ...
    99+
    2016-06-06
    Hive表的几种存储格式
  • postMessage的几种使用方式
    postMessage函数是用来在两个窗口之间进行通信的方法,可以在不同窗口之间传递消息。它有几种使用方式:1. 单向通信:在一个窗...
    99+
    2023-09-15
    方式
  • php的跳转方式有几种
    这篇文章主要介绍“php的跳转方式有几种”,在日常操作中,相信很多人在php的跳转方式有几种问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php的跳转方式有几种”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-20
  • hive中的几种join到底有什么区别
    目录数据:1. left join2. join3. full join4. Join…on 1=15. union6. union allunio...
    99+
    2022-11-13
  • Python Requests使用Cookie的几种方式
    Requests使用Cookie的几种方式 一、通过headers参数使用二、通过cookies参数使用三、通过Session会话使用方式0:自动设置方式1:通过key设置方式2:通过set ...
    99+
    2023-09-06
    python
  • redis有几种存储方式
    Redis其实就是一个用C语言写的一个程序,这个程序用来存储 key-value数据,数据先放在内存,然后写入磁盘指定位置。下面我们梳理一下Redis存储两种方式: RDB和AOF    ...
    99+
    2022-10-18
  • css定位有几种方式
    这篇文章将为大家详细讲解有关css定位有几种方式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。css定位有:1、static,表示静态定位;2、relative,表示相对定位;3、absolute,表示绝...
    99+
    2023-06-14
  • kafka的存储方式有哪几种
    Kafka的存储方式主要有两种: 持久化存储方式:Kafka使用持久化存储方式将消息持久化到磁盘上,确保消息的可靠性。Kafka...
    99+
    2023-10-27
    kafka
  • spring的加载方式有哪几种
    Spring的加载方式有三种:基于XML的配置加载、基于注解的配置加载和基于Java配置的加载。1. 基于XML的配置加载:通过编写...
    99+
    2023-09-28
    spring
  • php标记的方式有哪几种
    PHP标记有三种方式: 短标记(Short Tags):使用``的形式,例如``。 短短标记(Short Echo Tags...
    99+
    2023-10-25
    php
  • 常用的android加密方式有哪几种
    常用的Android加密方式有以下几种:1. 文件加密:通过对文件进行加密,确保文件内容的机密性,常见的文件加密算法有AES(Adv...
    99+
    2023-10-18
    android
  • C# 使用多线程的几种方式
    在C#中,有几种方式可以使用多线程:1. 使用Thread类:可以创建一个新线程并在其中执行指定的方法。可以使用Thread类来启动...
    99+
    2023-09-15
    C#
  • CSS position定位方式有几种
    有4种,分别是静态定位、相对定位、绝对定位和固定定位。好的,让我用一个有趣的比喻来解释CSS中position定位的不同方式。想象一下你是一位建筑师,而你的网页就是你的建筑项目。CSS的position属性就像是你在建筑项目中选择不同类型的...
    99+
    2023-11-23
    css position
  • 持久化redis有几种方式
    这篇文章主要介绍了持久化redis有几种方式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。持久化redis有几种方式?答:主要有两种方式:1...
    99+
    2022-10-19
  • asp加密方式有哪几种
    ASP(Active Server Pages)是一种用于创建动态网页的服务器端脚本语言,它本身并不提供加密功能,但可以使用其它加密...
    99+
    2023-09-21
    asp
  • javascript中有几种输出方式
    这篇文章给大家分享的是有关javascript中有几种输出方式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为JavaScript...
    99+
    2023-06-14
  • ddos有哪几种攻击方式
    这篇文章主要介绍“ddos有哪几种攻击方式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ddos有哪几种攻击方式”文章能帮助大家解决问题。ddos三种攻击方式是:1、SYN/ACK Flood攻击;...
    99+
    2023-07-05
  • js函数声明的方式有几种
    这篇文章主要介绍“js函数声明的方式有几种”,在日常操作中,相信很多人在js函数声明的方式有几种问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js函数声明的方式有几种”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作