zoukankan      html  css  js  c++  java
  • hive Java API

    Java连接hive进行操作的方式有多种,接触到了两种:

    首先,hive要起动远程服务接口,命令:

    hive --service hiveserver -p 50000 &

    1. 通过jdbc驱动连接hive

    当然还有其他的连接方式,比如ODBC等,这种方式很常用。

    不稳定,经常会被大数据量冲挂,不建议使用。

    package cn.ac.iscas.hiveclient;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class HiveJDBCClient {
    
        private static String driverName;
        private static String url;
        private static String user;
        private static String password;
        
        private Connection conn = null;
        private Statement stmt = null;
        
        static {    
            Properties prop = new Properties();
            InputStream in = HiveJDBCClient.class.getResourceAsStream("hiveCli.properties");
            try{
                prop.load(in);
                driverName = prop.getProperty("driverName");
                url = prop.getProperty("url");
                user = prop.getProperty("user");
                password = prop.getProperty("password");
            }catch (IOException e){
                e.printStackTrace();
            }
        }
        
        public boolean execute(String sql){
            boolean rs = false;
            try {
                conn = getConn();
                stmt = conn.createStatement();
                rs = stmt.execute(sql);
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try{
                    if( null != conn){
                        conn.close();
                        conn = null;
                    }
                    if( null != stmt){
                        stmt.close();
                        stmt = null;
                    }
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
            return rs;
        }
        
        public ResultSet executeQuery(String sql){
            ResultSet rs = null;
            try {
                conn = getConn();
                stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try{
                    if( null != conn){
                        conn.close();
                        conn = null;
                    }
                    if( null != stmt){
                        stmt.close();
                        stmt = null;
                    }
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
            return rs;
        }
        
        private static Connection getConn() throws ClassNotFoundException,
        SQLException{
            Class.forName(driverName);
            Connection conn = DriverManager.getConnection(url,user,password);
            return conn;
        }
        
        public static void main(String[] args){
            HiveJDBCClient hc = new HiveJDBCClient();
            ResultSet rs = hc.executeQuery("desc carsrecord");
            try {
                while(rs.next()){
                    System.out.println(rs.getString(1));
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    2. 通过hive thrift连接

    package cn.ac.iscas.hiveclient;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Properties;
    
    import org.apache.hadoop.hive.service.HiveClient;
    import org.apache.hadoop.hive.service.HiveServerException;
    import org.apache.thrift.TException;
    import org.apache.thrift.protocol.TBinaryProtocol;
    import org.apache.thrift.protocol.TProtocol;
    import org.apache.thrift.transport.TSocket;
    import org.apache.thrift.transport.TTransport;
    import org.apache.thrift.transport.TTransportException;
    
    public class HiveThreatClient {
        static TTransport transport;
        static TProtocol protocol;
        static HiveClient client ;
        static String ip;
        static int port;
        
        static {    
            Properties prop = new Properties();
            InputStream in = HiveJDBCClient.class.getResourceAsStream("hiveCli.properties");
            try{
                prop.load(in);
                ip = prop.getProperty("ip");
                port = Integer.valueOf(prop.getProperty("port"));
            }catch (IOException e){
                e.printStackTrace();
            }
        }
        
        public static List<String> execute(String query) throws HiveServerException, 
                        TException,TTransportException{
            List<String> result = new ArrayList<String>();
            transport = new TSocket(ip,port);
            protocol = new TBinaryProtocol(transport);
            client = new HiveClient(protocol);
            transport.open();
            client.send_execute(query);
            client.recv_execute();
            //client.send_commit_txn(rqst);
            //client.execute(query);
            List<String> list = client.fetchN(10);
            while(null!=list && list.size()>0){
                for(String r :list){
                    System.out.println(r);
                    result.add(r);
                }
                list = client.fetchN(10);
            }
            client.shutdown();
            transport.close();
            return result;
        }
            
        public static void main(String[] args){
            try {
                //HiveThreatClient.execute("desc carsrecord");
                //HiveThreatClient.execute("select distinct addressname from carsrecord  where collectiontime='2015-02-02'");
                //load data inpath '/2015/02/2015-02-01.dat' overwrite into table carsrecord partition(collectiontime='2015-02-01')
                for(int i = 10; i < 29; i++){
                    String day = i > 9 ? ""+i:"0"+i;
                    String stat = "load data inpath '/2015/02/2015-02-"+day+".dat' overwrite into table carsrecord partition(collectiontime='2015-02-"+day+"')";
                    System.out.println(stat);
                    HiveThreatClient.execute(stat);
                }
                //HiveThreatClient.execute("select * from carsrecord where collectiondate>='2014-01-01' and collectiondate<'2014-01-03'");
            } catch (HiveServerException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (TTransportException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (TException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    需要引入的jar包:

    •     <classpathentry kind="lib" path="hive-service-0.13.1.jar"/>
          <classpathentry kind="lib" path="hive-exec-0.13.1.jar"/>
          <classpathentry kind="lib" path="slf4j-api-1.6.6.jar"/>
          <classpathentry kind="lib" path="hive-metastore-0.13.1.jar"/>
          <classpathentry kind="lib" path="libfb303-0.9.0.jar"/>
  • 相关阅读:
    20080619 SQL SERVER 输入 NULL 的快捷键
    20090406 Adobe的“此产品的许可已停止工作”错误的解决办法
    20080908 Office Powerpoint 2007 不能输入中文的解决办法
    20080831 ClearGertrude Blog Skin 's cnblogs_code class
    20080603 Facebook 平台正式开放
    20080519 安装 Microsoft SQL Server 2000 时提示 创建挂起的文件操作
    test
    Linux—fork函数学习笔记
    SOA的设计理念
    Why BCP connects to SQL Server instance which start with account of Network Service fail?
  • 原文地址:https://www.cnblogs.com/dorothychai/p/4496996.html
Copyright © 2011-2022 走看看