使用JDBC操作Hive

  • 首先启动 Hive 的远程服务:hiveserver2 &

  • 所需 jar 包的 pom 文件如下:

    <dependencies>
    	<dependency>
    		<groupId>org.apache.hive</groupId>
    		<artifactId>hive-jdbc</artifactId>
    		<version>2.3.0</version>
    	</dependency>
    </dependencies>
    
  • 为了避免在程序运行时出现以下错误:
    在这里插入图片描述
    修改 hadoop 配置文件 $HADOOP_HOME/etc/hadoop/core-site.xml 加入如下配置项:

    <property>
    	<name>hadoop.proxyuser.root.hosts</name>
    	<value>*</valule>
    </property>
    <property>
    	<name>hadoop.proxyuser.root.groups</name>
    	<value>*</valule>
    </property>
    
  • 连接 Hive 的 JDBC 工具类:

    package hive;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    /*
     * 工具类:
     * 1、获取链接 
     * 2、释放资源: Connection Statement ResultSet
     */
    public class JDBCUtils {
    
    	// Hive的驱动
    	private static String driver = "org.apache.hive.jdbc.HiveDriver";
    	
    	// Hive的url地址
    	private static String url = "jdbc:hive2://192.168.0.1:10000/default";
    	
    	// 注册数据库的驱动
    	static {
    		try {
    			Class.forName(driver);
    		} catch (Exception ex) {
    			throw new ExceptionInInitializerError(ex);
    		}
    	}
    	
    	// 获取数据库Hive的连接
    	public static Connection getConnection() {
    		try {
    			return DriverManager.getConnection(url, "root", "root");
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    	
    	// 释放资源
    	public static void release(Connection conn, Statement st, ResultSet rs) {
    		if (rs != null) {
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		if (st != null) {
    			try {
    				st.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		if (conn != null) {
    			try {
    				conn.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }
    
  • Demo 程序:

    package hive;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    public class HiveDemo {
    
    	public static void main(String[] args) {
    		// 查询员工信息
    		String sql = "select * from emp";
    		
    		Connection conn = null;
    		PreparedStatement pst = null;
    		ResultSet rs = null;
    		try {
    			conn = JDBCUtils.getConnection();
    			pst = conn.prepareStatement(sql);
    			rs = pst.executeQuery();
    			while (rs.next()) {
    				String ename = rs.getString(2);
    				double sal = rs.getDouble(6);
    				System.out.println(ename + "\t" + sal);
    			}
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		} finally {
    			JDBCUtils.release(conn, pst, rs);
    		}
    	}
    }
    
  • 运行结果:
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值