摘要:本文主要讲了如何通过java来连接Hive,以及如何执行hive脚本
#hive --service hwi
用于通过浏览器来访问hive
http://hadoop0:9999/hwi/
3、 hive 远程服务 (端口号10000) 启动方式
一、Hive连接
1.1、通过shell
1、hive 命令行模式,直接输入#/hive/bin/hive的执行程序,或者输入#hive --service cli
#hive --service hwi
用于通过浏览器来访问hive
http://hadoop0:9999/hwi/
3、 hive 远程服务 (端口号10000) 启动方式
#hive --service hiveserver
注意:hiveserver不能和hwi服务同时启动使用。
4、使用dbveare工具
需要将presto的jar添加进来并配置连接
1.2 通过java代码
使用java代码来连接hive时,驱动可以选择使用jdbc,也可以选择使用presto
HiveServer使用thrift服务来为客户端提供远程连接的访问端口,在JDBC连接Hive之前必须先启动HiveServer。
hive --service hiveserver
hiveserver默认端口是10000,可以使用hive --service hiveserver -p 10002,更改默认启动端口,此端口也是JDBC连接端口。
1、直接通过jdbc
package com.lin.bdp.common.utils;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.lin.bdp.common.vo.Visitor;
/**
*
* 功能概要:hive客户端工具
*
* @author linbingwen
* @since 2016年10月20日
*/
public class HiveJdbcClient {
private static final Logger logger = LoggerFactory.getLogger(HiveJdbcClient.class);
public static final char UNDERLINE = '_';
private static String driverName;
private static String url;
private static String user;
private static String password;
private static class LazyHolder {
private static final HiveJdbcClient INSTANCE = new HiveJdbcClient();
}
public static final HiveJdbcClient getInstance() {
return LazyHolder.INSTANCE;
}
/**
* 初始化参数
* @author linbingwen
* @since 2016年10月20日
*/
private void init() {
driverName = ConfigLoader.getProperty("hive.jdbc.driverName");
url = ConfigLoader.getProperty("hive.jdbc.url");
user = ConfigLoader.getProperty("hive.jdbc.user");
password = ConfigLoader.getProperty("hive.jdbc.password");
}
private void initPresto() {
driverName ="com.facebook.presto.jdbc.PrestoDriver";
url = "jdbc:presto://10.78.104.5:8080/hive/ods_uba";
user = "presto";
password = "Admin@123";
}
private HiveJdbcClient() {
init();
}
/**
* 获取连接
* @author linbingwen
* @since 2016年10月20日
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
private Connection getConnection() throws ClassNotFoundException, SQLException {
Class.forName(driverName);
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
/**
* 按条件查找
* @author linbingwen
* @since 2016年10月20日
* @param clazz
* @param sql
* @return
* @throws Exception
*/
public <T> List<T> find(Class<T> clazz, String sql) throws Exception {
if (sql == null || sql.length() == 0) {
logger.warn("查询sql语句不能为空");
return new ArrayList<T>();
}
Connection connection = null;
PreparedStatement preState = null;
ResultSet rs = null;
try {
connection = getConnection();
Statement stmt = connection.createStatement();
rs = stmt.executeQuery(sql);
return (List<T>) handler(clazz, rs);
} catch (Exception e) {
logger.error("sql = {}执行出错,Exception = {}", sql, e.getLocalizedMessage());
throw e;
} finally {
release(connection,preState,rs);
}
}
/**
* 释放资源
*
* @author linbingwen
*