• 首先启动 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);
		}
	}
}
  • 运行结果:
  • 使用JDBC操作Hive_sql