hive Java API

來源:互聯網
上載者:User

標籤:

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"/>

hive Java API

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.