通过JDBC连接Hive

使用JDBC去操作hive可能是程序员们比较喜欢的一种方式,今天来总结一下使用java api来对hive进行增删查改,这里我主要演示对hive表中数据的操作,不创建表已经改变表原有的结构。本文基于hive已经能正常使用的情况。

首先hive必须以服务方式启动,平台默认启动时hive server2 模式。hiveserver2是比hiveserver更高级的服务模式,提供了hiveserver不能提供的并发控制、安全机制等高级功能。服务器启动以不同模式启动,客户端代码的编码方式也略有不同。

启动hive --service metastore &;

通过JDBC连接Hive_第1张图片  

启动 hive --service hiveserver2 &;

通过JDBC连接Hive_第2张图片

如果无法启动hiveserver的话,查一下hive-site.xml文件。保证主机和端口已经配置,如下:


  hive.server2.thrift.port
  10000



  hive.server2.thrift.bind.host
  192.168.83.129

在写代码之前,我们需要搭建环境,明确项目需要有哪些jar包,这里我给出一下我的项目中添加的包,后面我会分步讲解一下缺少每个jar包可能导致的错误。除了红框中是下载的之外,其他的都是在hive 的lib文件夹下能够找到。

通过JDBC连接Hive_第3张图片

由于远程连接Hive时需要做认证,因此要更改一下配置文件。Hadoop下的core-site.xml文件,添加以下内容:添加完成之后,记得重启Hadoop


    hadoop.proxyuser.root.hosts
    *


    hadoop.proxyuser.root.groups
    *

下面直接上代码,这里给出的api只有增、查、删三种操作,但是由于hive数据仓库一般不这样做而且不支持insert into语句,因此我们采用的方式是,更改源数据文件的内容,再重新添加到目标数据表中。

package com.xpu.ssh2linux;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class HiveJDBC {
	private static String driver = "org.apache.hive.jdbc.HiveDriver";
    private static String url = "jdbc:hive2://192.168.83.129:10000/default";
    private static String user = "root"; //一般情况下可以使用匿名的方式,在这里使用了root是因为整个Hive的所有安装等操作都是root
    private static String password = "";

    public static void main(String[] args) {
    	
        ResultSet res = null;
    	try {
    		/**
             * 第一步:把JDBC驱动通过反射的方式加载进来
             */
            Class.forName(driver);
             
            /**
             * 第二步:通过JDBC建立和Hive的连接器,默认端口是10000,默认用户名和密码都为空
             */
            Connection conn = DriverManager.getConnection(url, user, password); 
             
            /**
             * 第三步:创建Statement句柄,基于该句柄进行SQL的各种操作;
             */
            Statement state = conn.createStatement();
            String tableName = "region_tb";
            /**
             * 第四步:执行各种SQL操作;下面所有的逻辑构造在一起,就能完成改变原数据表中数据功能
             */   
            //删除表中原有的数据,但是只能删除外部表         
            String sql = "truncate table "+tableName;
            System.out.println("Running: " + sql);
            state.execute(sql);
            System.out.println("删除结束,开始加载数据到原数据表");
            
            //添加数据,采用load的方式
            String filepath = "/usr/kylin/kylindata/region.txt";
            sql = "load data local inpath '" + filepath + "' into table " + tableName;
            System.out.println("Running: " + sql);
            state.execute(sql);   
            System.out.println("添加结束");

            //查询表中的数据
            System.out.println("新的数据表如下:");
            sql = "select * from " + tableName;
            System.out.println("Running: " + sql);
            res = state.executeQuery(sql);
            while (res.next()) {
             System.out.println(res.getString(1) + "\t" + res.getString(2));
            }
            
    	}catch(Exception  e) {
            e.printStackTrace();  		
    	}
	}
}

执行完效果如下:

通过JDBC连接Hive_第4张图片

你可能感兴趣的:(大数据—Hive)