java代码访问hive的相关步骤。

相关说明

  • 使用java代码访问hive的时候需要hive的守护进程——hiveserver2
  • 也可以使用另外一个命令行客户端beeline进行对hive的访问

守护进程模式启动和beeline简单使用

hiveserver2 &
# 启动,并挂到后台
netstat -tupln|grep 10000
# 默认的端口是10000

beeline
!connect jdbc:hive2://localhost:10000 abc
# 交互式连接到hiveserver2
# 默认端口是10000
# 指定连接的OS用户是abc
# 需要输入密码
# 经测试,使用一个不存在的用户和密码也是可以登录的
# 应该是个BUG
show databases;
use test1;
show tables;
select * from emp;
# Ctrl+d 退出

beeline -u jdbc:hive2://localhost:10000/test1
# 直接连接到对应的库
select * from emp;
# Ctrl+d 退出

使用JDBC访问HiveServer2

参照《Win7 IDEA 开发环境搭建部署》和《hive UDF 测试样例开发》配置idea开发环境和pom配置文件。

pom.xml添加mysql的驱动依赖:

        <!-- 添加hive的jdbc驱动包 -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>${hive.version}</version>
        </dependency>

根据官方样例代码改造测试,官方样例代码地址如下: 
https://cwiki.apache.org/confluence/display/Hive/HiveClient#HiveClient-JDBC 
创建jdbc包,创建JdbcConnectHive类,测试代码如下:

package com.vincent.jdbc;
/*
    通过JDBC的方式访问hive(HiveServer2)
 */
import java.sql.*;

public class JdbcConnectHive {
    private static String driverName = "org.apache.hive.jdbc.HiveDriver";
    // 官网驱动包名字:org.apache.hadoop.hive.jdbc.HiveDriver 有问题,改掉

    public static void main(String[] args) throws SQLException {
        try {
            Class.forName(driverName);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.exit(1);
        }
        // 没有驱动就退出

        Connection con = DriverManager.getConnection("jdbc:hive2://192.168.1.10:10000/default", "hadoop", "hadoop");
        // 设置连接串对象,连接到的HiveServer2地址
        // 官网链接串写的jdbc:hive://... 应该是jdbc:hive2//...

        Statement stmt = con.createStatement();
        // 根据连接串对象,创建会话

        String sql = "show databases";
        System.out.println("Running: " + sql);
        ResultSet res = stmt.executeQuery(sql);
        if (res.next()) {
            while (res.next()) {
                System.out.println(res.getString(1));
            }
        }
        // 拼sql执行字符串:show databases;
        // 使用executeQuery()函数执行DML查询
        // 将查询结果赋值给ResultSet类型的res对象
        // 判断该对象是否为空,并打印不为空时候的结果
        // default库默认不显示

        sql = "use default";
        System.out.println("\nRunning: " + sql);
        stmt.execute(sql);
        sql = "show tables";
        System.out.println("Running: " + sql);
        res = stmt.executeQuery(sql);
        if (res.next()) {
            while (res.next()) {
                System.out.println(res.getString(1));
            }
        }
        // 执行DDL等没有数据返回的SQL语句时使用函数execute()
        // 执行有数据返回的SQL语句时使用executeQuery(),并将返回结果赋值给ResultSet类型的一个对象
    }
}

执行结果如下: 
这里写图片描述


来自@若泽大数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值