问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

程序中的Hive具体是干什么用的呢?

发布网友 发布时间:2022-04-25 21:01

我来回答

2个回答

懂视网 时间:2022-04-29 21:36

1、hive开放jdbc接口,开发需要导入jar如下

commons-logging-1.0.4.jar
hadoop-common-2.6.0.jar
hive_exec.jar
hive_jdbc.jar
hive_metastore.jar
hive_service.jar
httpclient-4.2.5.jar
httpcore-4.2.5.jar
libfb303.jar
log4j-1.2.16.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar

2、开发的实例程序如下

package com.gw;

import java.io.InputStream;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import org.apache.log4j.Logger;

/**
 * @author wangweifeng
 * @description:通过jdbc连接到hive实现如下操作:建表、删表、对表进行描述、 从本地文件系统导入数据、执行查询
 *
 */

public class HiveJdbcClient {

    public static Statement jdbcStatemt;
    private static ResultSet res = null;
    private static final Logger log = Logger.getLogger(HiveJdbcClient.class);

    // 采用单例模式创建一个jdbcstatemt
    public static Statement getJdbcStatemt() throws Exception {
        if (jdbcStatemt == null) {
            Properties prop = new Properties();
            URL url = Thread.currentThread().getContextClassLoader()
                    .getResource("config.properties");
            InputStream in = url.openStream();
            prop.load(in);
            String driverName = prop.getProperty("driverName");
            String jdbcUrl = prop.getProperty("jdbcUrl");
            String userName = prop.getProperty("userName");
            String password = prop.getProperty("password");
            // 1、使用CLASS 类加载驱动程序
            Class.forName(driverName);
            // 2、连接数据库
            Connection con = DriverManager.getConnection(jdbcUrl, userName,
                    password);
            // 3、Statement 接口需要通过Connection 接口进行实例化操作
            jdbcStatemt = con.createStatement();
        }
        return jdbcStatemt;
    }

    // 关闭jdbc连接
    public static void closeStatement() throws Exception {
        if (!jdbcStatemt.isClosed()) {
            jdbcStatemt.close();
        }
    }

    public static void main(String[] args) {

        try {
            jdbcStatemt = getJdbcStatemt();
        } catch (Exception e) {
            e.printStackTrace();
        }
        String Hql = "";
        /* String tableName = "DemiClass"; */
        /* String tableName = "DemiDate"; */
        /* String tableName = "DemiDept"; */
        String tableName = "tXsXsMxFactA";
        String rowTerminated = " ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘ ";
        String lineTerminated = " LINES TERMINATED BY ‘ ‘ ";

        // 1、删除表
        Hql = "DROP TABLE IF EXISTS " + tableName;
        try {
            jdbcStatemt.execute(Hql);
            System.out.println("表删除成功!");
        } catch (SQLException e1) {
            System.out.println("表删除失败!");
            e1.printStackTrace();
        }

        // 2、创建表
        /*
         * Hql = "CREATE EXTERNAL TABLE " + tableName +
         * "(clscode STRING,cty_big STRING,cty_sml STRING)  " + rowTerminated +
         * lineTerminated;
         */

        /*
         * Hql = "CREATE EXTERNAL TABLE " + tableName +
         * "(XSDATE STRING,YEAR STRING,MONTH STRING,DAY STRING) " +
         * rowTerminated + lineTerminated;
         */

        /*
         * Hql = "CREATE EXTERNAL TABLE " + tableName +
         * "(DEPCODE STRING,BRANCH_NAM STRING,GROUP_NAME STRING,DEPNAME STRING) "
         * + rowTerminated + lineTerminated;
         */

        Hql = "CREATE EXTERNAL TABLE "
                + tableName
                + "(CLSCODE STRING,DEPCODE STRING,XSDATE STRING,JXCOUNT INT,DXCOUNT INT,LXCOUNT INT,JXTOTAL DOUBLE,DXTOTAL DOUBLE,LXTOTAL DOUBLE) "
                + rowTerminated + lineTerminated;

        try {
            jdbcStatemt.execute(Hql);
            System.out.println("表创建成功!");
        } catch (SQLException e) {
            System.out.println("表创建失败!");
            e.printStackTrace();
        }

        // 3、执行“show tables”操作
        Hql = " SHOW TABLES ‘" + tableName + "‘";
        System.out.println("Running:" + Hql);
        try {
            res = jdbcStatemt.executeQuery(Hql);
            if (res.next()) {
                System.out.println(res.getString(1));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        // 4、执行“describe table”操作
        Hql = " DESCRIBE " + tableName;
        System.out.println("Running:" + Hql);
        try {
            res = jdbcStatemt.executeQuery(Hql);
            System.out.println("执行" + Hql + " 运行结果:");
            while (res.next()) {
                System.out.println(res.getString(1) + " " + res.getString(2));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        // 5、执行“load data into table”操作
        /*
         * String filePath =
         * "/home/Hadoop/Desktop/createTable_And_Data/DemiClass.csv"; Hql =
         * "LOAD DATA LOCAL INPATH ‘" + filePath +
         * "‘ OVERWRITE INTO TABLE DemiClass";
         */

        /*
         * String filePath =
         * "/home/Hadoop/Desktop/createTable_And_Data/DemiDate.csv"; Hql =
         * "LOAD DATA LOCAL INPATH ‘" + filePath+
         * "‘ OVERWRITE INTO TABLE DemiDate";
         */

        /*
         * String filePath =
         * "/home/Hadoop/Desktop/createTable_And_Data/DemiDept.csv"; Hql =
         * "LOAD DATA LOCAL INPATH ‘" + filePath+
         * "‘ OVERWRITE INTO TABLE DemiDept";
         */

        String filePath = "/home/Hadoop/Desktop/createTable_And_Data/tXsXsMxFactA.csv";
        Hql = "LOAD DATA LOCAL INPATH ‘" + filePath
                + "‘ OVERWRITE INTO TABLE tXsXsMxFactA";

        System.out.println("Running:" + Hql);
        try {
            jdbcStatemt.executeQuery(Hql);
            System.out.println("数据导入成功!");
        } catch (Exception SQLException) {
            System.out.println("bug!");
        }

        // 6、执行“select * query”操作
        // 执行“select * query”操作

        Hql = "SELECT * FROM " + tableName;
        System.out.println("Running:" + Hql);
        try {
            res = jdbcStatemt.executeQuery(Hql);
            System.out.println("执行“select * query”运行结果:");
            while (res.next()) {

                /*
                 * System.out.println(res.getInt(1) + " " + res.getString(2) +
                 * " " + res.getString(3));
                 */

                /*
                 * System.out.println(res.getString(1) + " " + res.getString(2)
                 * + " " + res.getString(3) + " " + res.getString(4));
                 */

                System.out.println(res.getString(1) + " " + res.getString(2)
                        + " " + res.getString(3) + " " + res.getInt(4) + " "
                        + res.getInt(5) + " " + res.getInt(6) + " "
                        + res.getDouble(7) + " " + res.getDouble(8) + " "
                        + res.getDouble(9) + " ");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        // 7、执行一个连接操作,查找某一天,某个部门,
        Hql = " select dd.XSDATE ,ddp.BRANCH_NAM, dc.CTY_BIG, fac.DXCOUNT, fac.DXTOTAL from tXsXsMxFactA fac join DemiClass dc on (fac.CLSCODE = dc.CLSCODE)"
                + "join DemiDate dd on (fac.XSDATE = dd.XSDATE) join DemiDept ddp on (fac.DEPCODE = ddp.DEPCODE) WHERE dd.XSDATE BETWEEN ‘2004-04-27‘ AND ‘2004-05-20‘";
        try {
            res = jdbcStatemt.executeQuery(Hql);
            while (res.next()) {
                System.out.println(res.getString(1) + " " + res.getString(2)
                        + " " + res.getString(3) + " " + res.getInt(4) + " "
                        + res.getDouble(5));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        try {
            closeStatement();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

Hive中jdbc接口

标签:

热心网友 时间:2022-04-29 18:44

Hive是基于Hadoop平台的数仓工具,具有海量数据存储、水平可扩展、离线批量处理的优点,解决了传统关系型数仓不能支持海量数据存储、水平可扩展性差等问题,但是由于Hive数据存储和数据处理是依赖于HDFS和MapRece,因此在Hive进行数据离线批量处理时,需将查询语言先转换成MR任务,由MR批量处理返回结果,所以Hive没法满足数据实时查询分析的需求。
Hive是由FaceBook研发并开源,当时FaceBook使用Oracle作为数仓,由于数据量越来越大,Oracle数仓性能越来越差,没法实现海量数据的离线批量分析,因此基于Hadoop研发Hive,并开源给Apacha。
由于Hive不能实现数据实时查询交互,Hbase可提供实时在线查询能力,因此Hive和Hbase形成了良性互补。Hbase因为其海量数据存储、水平扩展、批量数据处理等优点,也得到了广泛应用。
Pig与HIVE工具类似,都可以用类sql语言对数据进行处理。但是他们应用场景有区别,Pig用于数据仓库数据的ETL,HIVE用于数仓数据分析。
从架构图当中,可看出Hive并没有完成数据的存储和处理,它是由HDFS完成数据存储,MR完成数据处理,其只是提供了用户查询语言的能力。Hive支持类sql语言,这种SQL称为Hivesql。用户可用Hivesql语言查询,其驱动可将Hivesql语言转换成MR任务,完成数据处理。
【Hive的访问接口】
CLI:是hive提供的命令行工具
HWI:是Hive的web访问接口
JDBC/ODBC:是两种的标准的应用程序编程访问接口
Thrift Server:提供异构语言,进行远程RPC调用Hive的能力。
因此Hiv具备丰富的访问接口能力,几乎能满足各种开发应用场景需求。
【Driver】
是HIVE比较核心的驱动模块,包含编译器、优化器、执行器,职责为把用户输入的Hivesql转换成MR数据处理任务
【Metastore】
是HIVE的元数据存储模块,数据的访问和查找,必须要先访问元数据。Hive中的元数据一般使用单独的关系型数据库存储,常用的是Mysql,为了确保高可用,Mysql元数据库还需主备部署。
架构图上面Karmasphere、Hue、Qubole也是访问HIVE的工具,其中Qubole可远程访问HIVE,相当于HIVE作为一种公有云服务,用户可通过互联网访问Hive服务。
Hive在使用过程中出现了一些不稳定问题,由此发展出了Hive HA机制,
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
请问昆山正仪到江苏省昆山市出口加工区新竹路99号 怎么坐班车最近? 跪求苏州神达电脑地址!!! 华为运动耳机挂脖式怎么配对 雅酷美挂脖式无线蓝牙防水耳机-运动时尚,自由畅听 已知函数f(x)=cos^2x-sin^2x+2根号3sinxcosx+1 原先微信有联系后来突然对方要求我对他进行朋友验证我没有他电话号码... 已知函数f(x)=cos^2x-sin^2x+2根号3sinxcosx 已知函数fx=cos^2*x-sin^2*x+2sinx*cosx,求fx的最小正周期,并求当... 已知函数f(x)=cos2x-sin2x 4sinx·cosx求f(x)的最小正周期,并求当x为... 已知f(x)=cos^2x-sin^x+2sinxcosx。①求函数最小正周期②当x∈【0... 壶口瀑布属于山西还是陕西? Hadoop的Context类是用来干什么的 黄河壶口瀑布位于陕西与哪个省之间 陕西壶口瀑布在哪个省 黄河壶口瀑布归属哪个省? 互联网巨头的Hadoop是用裸机搭建还是运行在虚拟机上的 壶口瀑布究竟是在陕西还是在山西?怎么两个省都有说? Zookeeper在hadoop中充当什么角色,dubbo使用zookeeper又是干嘛的? Hadoop入门需要哪些知识? 你好 请问xk3190-A9+地磅 按打印键显示ERR19是啥情况 空气炸锅可以单独热油吗 空气炸锅可以放黄油吗 空气炸锅可以做油炸冰淇淋吗 mac book air开机出现问号文件夹 我mac book air macintosh HD抹掉 机子就不动 重启后就出现一个问号《文件》请那个大神救救我电脑 谢谢了 MacBook pro 开机的时候出现了带问号的文件夹?然后就进入网络恢复磁盘工具里面也没办法抹掉 MACBOOK AIR突然开机白屏中间有一个文件夹,上面出现一个问号该怎么处理? 苹果电脑 开机出现一个问号的文件夹。是怎么回事 macbook开机白屏出现文件夹问号,怎么解决? macbook开机白屏且有问号文件夹,无法进系统怎么办? 右脉:沉细弦,左脉:沉细弦寸滑,涩,手凉,大概说明有什么病呢?请专家解答。 壶口瀑布风景区在陕西省什么地方 壶口瀑布位于陕西与哪个省之间 壶口瀑布位于陕西与哪个省之间 大数据专业是干嘛的? 宣统某年十月初十日,赵文魁请得端康皇贵妃息脉,左关弦滑,而尚浮,右关寸仍滑,昨服化风清热调胃之药, 为什么壶口瀑布是山西而不是陕西的 求《七言脉诀》全文 keep可以连接Wofit手环吗? 1.切脉的部位一般在哪里? 请问中医搭脉总是说脉浮或脉细等,这种说法是脉的整体现象吗?脉不是有寸关尺吗?为什么这说脉细的啊? 荣耀手环4能不能连接keep? 用obs录制游戏,录出来的视频卡,这是什么原因呢? 右手中指末端骨折按工伤能评到几级伤残啊 跟骨骨折能评几级工伤? 右足第2趾骨骨折工伤可以评几级伤残 工伤5根肋骨骨折能评几级伤残? 工伤手指骨折属于几级伤残,如何索赔 工伤,右手食指末节指骨骨折,能评几级伤残 工伤肋骨骨折一根伤残鉴定属于几级