微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用Java代码通过JDBC连接Hiveserver2

1.在终端启动hiveserver2
#hiveserver2

2.使用beeline连接hive
另外打开一个终端,输入如下命令(xavierdb必须是已经存在的数据库
#beeline -u jdbc:hive2://localhost:10000/xavierdb -n hive -p hive

3.添加maven依赖

<!-- https://mvnrepository.com/artifact/org.apache.hadoop.hive/hive-jdbc -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>1.1.0</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.6.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.6.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-metastore -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-metastore</artifactId>
            <version>1.1.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-metastore -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>1.1.0</version>
        </dependency>
maven依赖

出现过的错误: Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000/default

解决办法:检查发现运行beeline时Driver版本Driver: Hive JDBC (version 1.1.0-cdh5.16.1)比maven依赖中的Driver版本低,将maven版本调至1.1.0问题解决

Java API测试:

注意:这里的url必须是beeline值中使用的url

package TestOption;

import org.junit.Test;
import org.junit.After;
import org.junit.Before;

import java.sql.*;

/**
 * @Author:Xavier
 * @Data:2019-02-18 11:43
 **/

public class HiveOption {

    private static String driverName = "org.apache.hive.jdbc.HiveDriver";
    private static String url = "jdbc:hive2://172.19.224.213:10000/xavierdb";

    private static Connection con = null;
    private static Statement state = null;
    private static ResultSet res = null;

    //加载驱动,创建连接
    @Before
    public void init() throws ClassNotFoundException, sqlException {
        Class.forName(driverName);
        con = DriverManager.getConnection(url, "hive", "hive");
        state = con.createStatement();
    }

    //创建数据库
    @Test
    public void CreateDb() throws sqlException {

        state.execute("create database xavierdb1");

    }

    // 查询所有数据库
    @Test
    public void selectDb() throws sqlException {
        res = state.executeQuery("show databases");
        while (res.next()) {
            System.out.println(res.getString(1));
        }
    }

    // 删除数据库
    @Test
    public void dropDb() throws sqlException {
        state.execute("drop database if exists xavierdb1");
    }

    // 创建表
    @Test
    public void createTab() throws sqlException {

        state.execute("create table if not exists student ( " +
                "name string , " +
                "age int , " +
                "agent string  ," +
                "adress struct<street:STRING,city:STRING>) " +
                "row format delimited " +
                "fields terminated by ',' " +//字段与字段之间的分隔符
                "collection items terminated by ':'"+//一个字段各个item的分隔符
                "lines terminated by '\n' ");//行分隔符
    }

    // 查询所有表
    @Test
    public void selectTab() throws sqlException {
        res=state.executeQuery("show tables");
        while(res.next()){
            System.out.println(res.getString(1));
        }
    }

    // 查看表结构
    @Test
    public void descTab() throws sqlException {
        res=state.executeQuery("desc student");
        while(res.next()){
            System.out.println(res.getString(1)+"\t"+res.getString(2));
        }
    }

    // 加载数据(本地加载)
    @Test
    public void loadData() throws sqlException {
        String infile=" '/root/studentData' ";
        state.execute("load data local inpath "+infile+"overwrite into table student");
    }

    // 查询数据
    @Test
    public void selectTab() throws sqlException {
        res=state.executeQuery("select * from student");
        while(res.next()){
            System.out.println(
                    res.getString(1)+"-"+
                    res.getString(2)+"-"+
                    res.getString(3)+"-"+
                    res.getString(4));
        }
    }

    // 统计查询(会运行mapreduce作业,资源开销较大)
    @Test
    public void countData() throws sqlException {
        res=state.executeQuery("select count(1) from student");
        while(res.next()){
            System.out.println(res.getInt(1));
        }
    }

    // 删除表
    @Test
    public void dropTab() throws sqlException {
        state.execute("drop table student1");
    }

    @After
    public void destory() throws sqlException {
        if (res != null) state.close();
        if (state != null) state.close();
        if (con != null) con.close();
    }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐