HiveJDBC示例

在使用 JDBC 开发 Hive 程序时, 必须首先开启 Hive 的远程服务接口。在hive安装目录下的bin,使用下面命令进行开启:

    hive -service hiveserver &  //Hive低版本提供的服务是:Hiveserver
    hive --service hiveserver2 &       //Hive0.11.0以上版本提供了的服务是:Hiveserver2

  我这里使用的Hive1.0版本,故我们使用Hiveserver2服务,下面我使用 Java 代码通过JDBC连接Hiveserver。

  18.1  测试数据

本地目录/home/hadoop/下的djt.txt文件内容(每行数据之间用tab键隔开)如下所示:

  1        dajiangtai
  2        hadoop
  3        Hive
  4        hbase
  5        spark

    18.2  程序代码

  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.ResultSet;
  import java.sql.SQLException;
  import java.sql.Statement;
  public class HiveJdbcTest1 {
           private static String driverName = "org.apache.Hive.jdbc.HiveDriver";//Hive驱动名称
           private static String url = "jdbc:Hive2://djt11:10000/default";//连接Hive2服务的连接地址,Hive0.11.0以上版本提供了一个全新的服务:HiveServer2
           private static String user = "hadoop";//对HDFS有操作权限的用户
           private static String password = "";//在非安全模式下,指定一个用户运行查询,忽略密码
           private static String sql = "";
           private static ResultSet res;
           public static void main(String[] args) {
               try {
                   Class.forName(driverName);//加载HiveServer2驱动程序
                   Connection conn = DriverManager.getConnection(url, user, password);//根据URL连接指定的数据库
                   Statement stmt = conn.createStatement();
                 
                   //创建的表名
                   String tableName = "testHiveDriverTable";
                 
                   /** 第一步:表存在就先删除 **/
                   sql = "drop table " + tableName;
                   stmt.execute(sql);
                 
                   /** 第二步:表不存在就创建 **/
                   sql = "create table " + tableName + " (key int, value string)  row format delimited fields terminated by '\t' STORED AS TEXTFILE";
                   stmt.execute(sql);
                 
                   // 执行“show tables”操作
                   sql = "show tables '" + tableName + "'";
                   res = stmt.executeQuery(sql);
                   if (res.next()) {
                       System.out.println(res.getString(1));
                   }
                 
                   // 执行“describe table”操作
                   sql = "describe " + tableName;
                   res = stmt.executeQuery(sql);
                   while (res.next()) {  
                       System.out.println(res.getString(1) + "\t" + res.getString(2));
                   }
                 
                   // 执行“load data into table”操作
                   String filepath = "/home/hadoop/djt.txt";//Hive服务所在节点的本地文件路径
                   sql = "load data local inpath '" + filepath + "' into table " + tableName;
                   stmt.execute(sql);
                 
                   // 执行“select * query”操作
                   sql = "select * from " + tableName;
                   res = stmt.executeQuery(sql);
                   while (res.next()) {
                       System.out.println(res.getInt(1) + "\t" + res.getString(2));
                   }
                 
                   // 执行“regular Hive query”操作,此查询会转换为MapReduce程序来处理
                   sql = "select count(*) from " + tableName;
                   res = stmt.executeQuery(sql);
                   while (res.next()) {
                       System.out.println(res.getString(1));
                   }        
                   conn.close();
                   conn = null;
               } catch (ClassNotFoundException e) {
                   e.printStackTrace();
                   System.exit(1);
               } catch (SQLException e) {
                   e.printStackTrace();
                   System.exit(1);
               }
           }
  }

     18.3  运行结果(右击-->Run as-->Run on Hadoop)

   执行“show tables”运行结果:

        testHivedrivertable

     执行“describe table”运行结果:

      key    int
      value    string

     执行“select * query”运行结果:

      1        dajiangtai
      2        hadoop
      3        Hive
      4        hbase
      5        spark

      执行“regular Hive query”运行结果:

      5


hive jdbc使用

Hive项目开发环境搭建(Eclipse\MyEclipse + Maven)

Hadoop Hive概念学习系列之hive里的JDBC编程入门(二十二)的更多相关文章

  1. Hadoop HDFS概念学习系列之HDFS升级和回滚机制(十二)

    不多说,直接上干货! HDFS升级和回滚机制 作为一个大型的分布式系统,Hadoop内部实现了一套升级机制,当在一个集群上升级Hadoop时,像其他的软件升级一样,可能会有新的bug或一些会影响现有应 ...

  2. Hadoop Hive概念学习系列之hive里的索引(十三)

    Hive支持索引,但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键. Hive索引可以建立在表中的某些列上,以提升一些操作的效率,例如减少MapReduce任务中需要 ...

  3. Hadoop Hive概念学习系列之hive里的扩展接口(CLI、Beeline、JDBC)(十六)

    <Spark最佳实战  陈欢>写的这本书,关于此知识点,非常好,在94页. hive里的扩展接口,主要包括CLI(控制命令行接口).Beeline和JDBC等方式访问Hive. CLI和B ...

  4. Hadoop Hive概念学习系列之hive里如何显示当前数据库及传参(十九)

    这个小知识点,看似简单,用处极大. $ hive --hiveconf hive.cli.print.current.db=true $ hive --hiveconf hive.cli.print. ...

  5. Hadoop Hive概念学习系列之hive三种方式区别和搭建、HiveServer2环境搭建、HWI环境搭建和beeline环境搭建(五)

     说在前面的话 以下三种情况,最好是在3台集群里做,比如,master.slave1.slave2的master和slave1都安装了hive,将master作为服务端,将slave1作为服务端. 以 ...

  6. Hadoop Hive概念学习系列之hive里的优化和高级功能(十四)

    在一些特定的业务场景下,使用hive默认的配置对数据进行分析,虽然默认的配置能够实现业务需求,但是分析效率可能会很低. Hive有针对性地对不同的查询进行了优化.在Hive里可以通过修改配置的方式进行 ...

  7. Hadoop Hive概念学习系列之hive里的分区(九)

    为了对表进行合理的管理以及提高查询效率,Hive可以将表组织成“分区”. 分区是表的部分列的集合,可以为频繁使用的数据建立分区,这样查找分区中的数据时就不需要扫描全表,这对于提高查找效率很有帮助. 分 ...

  8. Hadoop Hive概念学习系列之hive里的用户定义函数UDF(十七)

    Hive可以通过实现用户定义函数(User-Defined Functions,UDF)进行扩展(事实上,大多数Hive功能都是通过扩展UDF实现的).想要开发UDF程序,需要继承org.apache ...

  9. Hadoop Hive概念学习系列之hive里的视图(十二)

    不多说,直接上干货! 可以先,从MySQL里的视图概念理解入手 视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,与基本表不同,它是一个虚表.在数据库中,存放的只是视图的定义,而不存放视图包含的 ...

随机推荐

  1. Java并发编程原理与实战九:synchronized的原理与使用

    一.理论层面 内置锁与互斥锁 修饰普通方法.修饰静态方法.修饰代码块 package com.roocon.thread.t3; public class Sequence { private sta ...

  2. Lucene之Java实战

    1.导包 2.索引的创建 2.1首先,我们需要定义一个词法分析器. Analyzer analyzer = new IKAnalyzer();//官方推荐 Analyzer analyzer = ne ...

  3. Xilinx Altera FPGA中的逻辑资源(Slices VS LE)比较

    前言 经常有朋友会问我,“我这个方案是用A家的FPGA还是X家的FPGA呢?他们的容量够不够呢?他们的容量怎么比较呢?”当然,在大部分时候,我在给客户做设计的时候,直接会用到最高容量的产品,因为我们的 ...

  4. 【专题】计数问题(排列组合,容斥原理,Prufer序列)

    [容斥原理] 对于统计指定排列方案数的问题,一个方案是空间中的一个元素. 定义集合x是满足排列中第x个数的限定条件的方案集合,设排列长度为S,则一共S个集合. 容斥原理的本质是考虑[集合交 或 集合交 ...

  5. BZOJ4816 数字表格

    4816: [Sdoi2017]数字表格 Time Limit: 50 Sec  Memory Limit: 128 MB Description Doris刚刚学习了fibonacci数列.用f[i ...

  6. [SDOI2010]外星千足虫 题解 高斯消元+bitset简介

    高斯消元 + bitset 简介: 高斯消元其实就是以加减消元为核心求唯一解.这道题还是比较裸的,可以快速判断出来.我们将每一只虫子看作一个未知数,这样根据它给出的 m 组方程我们可以高斯消元得出每一 ...

  7. Halcon编程-基于形状特征的模板匹配

    halcon软件最高效的一个方面在于模板匹配,号称可以快速进行柔性模板匹配,能够非常方便的用于缺陷检测.目标定位.下面以一个简单的例子说明基于形状特征的模板匹配.      为了在右图中,定位图中的三 ...

  8. python模块-platform

    #author:Blood_Zero #coding:utf- import platform print dir(platform) #获取platform函数功能 platform.archite ...

  9. Linux input子系统学习总结(三)----Input设备驱动

    Input 设备驱动 ---操作硬件获取硬件寄存器中设备输入的数据,并把数据交给核心层: 一 .设备驱动的注册步骤: 1.分配一个struct  input_dev :          struct ...

  10. Ubuntu server 搭建Git server【转】

    转自:http://www.cnblogs.com/candle806/p/4064610.html Ubuntu server 搭建Git server,git相比svn,最主要就是分布式了,每个客 ...