zoukankan      html  css  js  c++  java
  • 通过JDBC连接HiveServer2

    如果通过JDBC连接HiveServer2时提示:User: hive is not allowed to impersonate hive,需要在core-site.xml中新增如下配置:
      hadoop.proxyuser.hive.hosts=*
      hadoop.proxyuser.hive.groups=*
    红色部分表示可通过代理用户hive操作的主机和用户组,蓝色部分表示所有的hadoop主机及该主机上的hadoop用户组。
    
    连接代码如下:
    package com.mengyao.bigdata.utils;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    /**
     * HiveJdbcUtil
     * core-site.xml配置hive连接用户通过代理操作任意hadoop的用户组及主机
     * 		hadoop.proxyuser.hive.hosts=*
     * 		hadoop.proxyuser.hive.groups=*
     * @author mengyao
     *
     */
    @Component
    public class HiveJdbcUtil {
    
    	private static HiveJdbcUtil hiveJdbcUtil;
    	@Value("${hive.driverClassName}")
    	private String driverClassName = "org.apache.hive.jdbc.HiveDriver";
    	@Value("${hive.url}")
    	private String url = "jdbc:hive2://h3:10000/default?mapred.job.queue.name=default;hive.mapred.mode=nonstrict";
    	@Value("${hive.username}")
    	private String username = "hive";
    	@Value("${hive.password}")
    	private String password = "hive";
    	private Connection connection;
    	
    	
    	/**
    	 * 私有构造函数声明
    	 */
    	private HiveJdbcUtil() {
    		try {
    			Class.forName(driverClassName);
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	/**
    	 * 获取HiveJdbcUtil单例对象
    	 * @return
    	 */
    	public static HiveJdbcUtil getInstance() {
    		if (null == hiveJdbcUtil) {
    			hiveJdbcUtil = new HiveJdbcUtil();
    		}
    		return hiveJdbcUtil;
    	}
    	
    	/**
    	 * 获取HiveJdbc连接
    	 * @return
    	 */
    	public Connection getConnection() {
    		try {
    			connection = DriverManager.getConnection(url, username, password);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return connection;
    	}
    	
    	/**
    	 * 关闭连接
    	 * @param rs
    	 * @param ps
    	 * @param st
    	 * @param connection
    	 */
    	public void closeAll(ResultSet rs, PreparedStatement ps, Statement st, Connection connection) {
    		try {
    			if (null != rs) {
    				rs.close();
    			}
    			if (null != ps) {
    				ps.close();
    			}
    			if (null != st) {
    				st.close();
    			}
    			if (null != connection) {
    				connection.close();
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public static void main(String[] args) {
    		HiveJdbcUtil instance = HiveJdbcUtil.getInstance();
    		Connection connection_ = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    		try {
    			connection_ = instance.getConnection();
    			ps = connection_.prepareStatement("show databases");
    			rs = ps.executeQuery();
    			while(rs.next()) {
    				System.out.println("==== "+rs.getString(1));
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} finally {
    			instance.closeAll(rs, ps, null, connection_);
    		}
    	}
    
    }
     

    User: hive is not allowed to impersonate hive

  • 相关阅读:
    Spring系列之访问数据库
    (转载)Java反射机制
    Spring系列之IOC容器
    SpringMVC系列之基本配置
    Java中Comparable和Comparator区别小结
    计算机网络知识点回顾
    Java内部类
    Java接口回调机制
    linux mysql-bin.000001占用磁盘空间过大解决方法
    linux mysql数据库登录密码忘记了怎么办
  • 原文地址:https://www.cnblogs.com/mengyao/p/9115705.html
Copyright © 2011-2022 走看看