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

时间: 2024-10-27 16:51:44

hive Java API的相关文章

使用hive客户端java api读写hive集群上的信息

上文介绍了hdfs集群信息的读取方式,本文说hive 1.先解决依赖 <properties> <hive.version>1.2.1</hive.version> </properties> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>${hive

Java API 读取HDFS目录下的所有文件

/** * 获取1号店生鲜食品的分类id字符串 * @param filePath * @return */ public String getYHDSXCategoryIdStr(String filePath) { final String DELIMITER = new String(new byte[]{1}); final String INNER_DELIMITER = ","; // 遍历目录下的所有文件 BufferedReader br = null; try { F

_00017 Kafka的体系结构介绍以及Kafka入门案例(初级案例+Java API的使用)

博文作者:妳那伊抹微笑 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前,妳却感觉不到我的存在 技术方向:Flume+Kafka+Storm+Redis/Hbase+Hadoop+Hive+Mahout+Spark ... 云计算技术 转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作! qq交流群:214293307  (期待与你一起学习,共同进步) # Kfaka的体系结构 # 学习前言 Kafka的整个学习过程就是自己看官网的文档,出

Hbase java API 调用详解

Hbase java API 调用 一. hbase的安装 参考:http://blog.csdn.net/mapengbo521521/article/details/41777721 二.hbase访问方式 Native java api:最常规最高效的访问方式. Hbase shell:hbase的命令行工具,最简单的接口,适合管理员使用 Thrift gateway:利用thrift序列化结束支持各种语言,适合异构系统在线访问 Rest gateway:支持rest风格的http api

Hbase框架原理及相关的知识点理解、Hbase访问MapReduce、Hbase访问Java API、Hbase shell及Hbase性能优化总结

转自:http://blog.csdn.net/zhongwen7710/article/details/39577431 本blog的内容包含: 第一部分:Hbase框架原理理解 第二部分:Hbase调用MapReduce函数使用理解 第三部分:Hbase调用Java API使用理解 第四部分:Hbase Shell操作 第五部分:Hbase建表.读写操作方式性能优化总结 第一部分:Hbase框架原理理解 概述 HBase是一个构建在HDFS上的分布式列存储系统:HBase是基于Google

hive-通过Java API操作

通过Java API操作hive,算是测试hive第三种对外接口 测试hive 服务启动 1 package org.admln.hive; 2 3 import java.sql.SQLException; 4 import java.sql.Connection; 5 import java.sql.ResultSet; 6 import java.sql.Statement; 7 import java.sql.DriverManager; 8 9 public class testHiv

笔记:MyBatis 使用 Java API配置

我们已经讨论了各种MyBatis配置元素,如envronments.typeAlias和typeHandlers,以及如何使用XML配置它们.即使你想使用基于JavaAPI的MyBatis配置,MyBatis的SqlSessionFactory接口除了使用基于XML的配置创建外也可以通过Java API 编程式地被创建.每个在XML中配置的元素,都可以编程式的创建.使用Java API创建SqlSessionFactory,代码如下: ? ? ????public?static?SqlSessi

MyEclipse生成java API文档

API文档是提供接口是必须的,如果用word文档,不仅书写起来很麻烦,而且对于使用者来说很不方便.可以使用myEclipse来生成API文档,与java提供的官方API文档一样.一下是详细步骤. /**  * 数据库操作通用程序包  */ package xju.dbhelper; import java.sql.*; /**  * 数据库操作通用接口  * @author xju  * @version 1.0  */ public abstract interface DBHelper {

spark2.x由浅入深深到底系列六之RDD java api详解三

学习任何spark知识点之前请先正确理解spark,可以参考:正确理解spark 本文详细介绍了spark key-value类型的rdd java api 一.key-value类型的RDD的创建方式 1.sparkContext.parallelizePairs JavaPairRDD<String, Integer> javaPairRDD =         sc.parallelizePairs(Arrays.asList(new Tuple2("test", 3