zoukankan      html  css  js  c++  java
  • Hive使用druid做连接池代码实现

    • 配置文档
    hive_jdbc_url=jdbc:hive2://192.168.0.22:10000/default
    hive.dbname=xxxxx
    hive_jdbc_username=root
    hive_jdbc_password=123456
    
    #配置初始化大小、最小、最大
    hive_initialSize=20
    hive_minIdle=20
    hive_maxActive=500
    
    #配置获取连接等待超时的时间
    hive_maxWait=60000
    • Jar包引入(Maven)
            <dependency>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid</artifactId>
                    <version>1.0.26</version>
            </dependency>    
    • 代码实现
    public class HiveDataSourceUtil {
        private static DruidDataSource hiveDataSource = new DruidDataSource();
        public static Connection conn = null;
        private static final Logger log = LoggerFactory.getLogger(HiveDataSourceUtil.class); 
    
        public static DruidDataSource getHiveDataSource() {
            if(hiveDataSource.isInited()){  
                return hiveDataSource;
            }         
                       
            try {       
                Properties dsProp = PropertiesUtil.getDataSourceProp();
                //基本属性 url、user、password
                hiveDataSource.setUrl(dsProp.getProperty("hive_jdbc_url"));
                hiveDataSource.setUsername(dsProp.getProperty("hive_jdbc_username"));
                hiveDataSource.setPassword(dsProp.getProperty("hive_jdbc_password"));
    
                //配置初始化大小、最小、最大
                hiveDataSource.setInitialSize(Integer.parseInt(dsProp.getProperty("hive_initialSize")));
                hiveDataSource.setMinIdle(Integer.parseInt(dsProp.getProperty("hive_minIdle")));
                hiveDataSource.setMaxActive(Integer.parseInt(dsProp.getProperty("hive_maxActive")));
    
                //配置获取连接等待超时的时间
                hiveDataSource.setMaxWait(Integer.parseInt(dsProp.getProperty("hive_maxWait")));
    
                //配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
                hiveDataSource.setTimeBetweenEvictionRunsMillis(60000);
    
                //配置一个连接在池中最小生存的时间,单位是毫秒
                hiveDataSource.setMinEvictableIdleTimeMillis(300000);
    
    //            hiveDataSource.setValidationQuery("select * from xxxx");
                hiveDataSource.setTestWhileIdle(false);
    //            hiveDataSource.setTestOnBorrow(false);
    //            hiveDataSource.setTestOnReturn(false);
    
                //打开PSCache,并且指定每个连接上PSCache的大小
                hiveDataSource.setPoolPreparedStatements(true);
                hiveDataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
       
                //配置监控统计拦截的filters
    //            hiveDataSource.setFilters("stat");
    
                hiveDataSource.init();
            } catch (SQLException e) {
                e.printStackTrace();
                closeHiveDataSource();
            }
            return hiveDataSource;
        }
    
        /**
         *@Description:关闭Hive连接池
         */
        public static void closeHiveDataSource(){
            if(hiveDataSource != null){
                hiveDataSource.close();
            }
        }  
    
        /**
         * 
         *@Description:获取Hive连接 
         *@return
         */
        public static Connection getHiveConn(){
            try {
                hiveDataSource = getHiveDataSource();
                conn = hiveDataSource.getConnection();
            } catch (SQLException e) {
                log.error("--"+e+":获取Hive连接失败!");
            }
            return conn;
        }
    
        /**
         *@Description:关闭Hive数据连接
         */
        public static void closeConn(){
            try {
                if(conn != null){
                    conn.close();
                }
            } catch (SQLException e) {
                log.error("--"+e+":关闭Hive-conn连接失败!");
            }
        }
       
    
        public static void main(String[] args) throws Exception {
            DataSource ds = HiveDataSourceUtil.getHiveDataSource();
            Connection conn = ds.getConnection();
            Statement stmt = null;
            if(conn == null){  
                System.out.println("null");
            }else{
                System.out.println("conn");
                stmt = conn.createStatement();
                ResultSet res = stmt.executeQuery("select * from xxxx t");  
                int i = 0;
                while(res.next()){
                    if(i<10){
                        System.out.println(res.getString(1));
                        i++;
                    }
                }
            }
    
            stmt.close();  
            conn.close();
        }
    }

    • 服务端服务开启
    打开远程端口:hive --service hiveserver2 &   
    PS自己不懂的话,可以找运维人员

  • 相关阅读:
    算法>分支限界 小强斋
    C# DataGridView 的 CellValueChanged 与修改数据没保存的情况
    Windows8使用虚拟磁盘vhdx功能来为容量较大的文件夹扩容
    DataSet / DataTable 对 Access 数据库进行更改后,无法获取自动编号(自增)列的新值
    使用Windows Server 2012配置更新服务Update Service,以及客户端的配置
    在Windows 8中找回开始菜单
    DataSet / BindingSource / DataGridView / BindingNavigator 的关系与绑定、更新顺序
    Windows8 的搜狗输入法的快捷键推荐设置方法
    如果要使用DataAdapter来修改DataSet的子集时,请尽量对父级做修改。
    about PostgreSQL
  • 原文地址:https://www.cnblogs.com/liuyp-ken/p/9933599.html
Copyright © 2011-2022 走看看