热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hive关联查询多次执行结果不一致_聊聊HIVE

hive是数据仓库工具hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、

hive是数据仓库工具

    hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。

    Hive 定义了简单的类 SQL 查询语言,称为 QL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

hive解决的问题

  将结构化的数据文件映射为一张数据库表,并定义了简单的类 SQL 查询语言,完成对HDFS数据的查询。

hive的结构

    用户接口包括CLI,JDBC/ODBC,WUI;CLI就是shell 终端命令行,采用交互式使用hive命令行与hive进行交互;常用JDBC/ODBC,是hive基于JDBC提供的客户端,用户通过它连接至 hive server服务;Web UI,通过浏览器访问hive。

    Driver组件包括Complier、Optimizer和Executor,它的作用是将我们写的HiveQL语句进行解析、编译优化,生成执行计划,然后调用底层的mapreduce计算框架。

    Metastore组件是元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。

    元数据对于hive十分重要,因此hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性。

    thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口,包括JDBC和ODBC接口。

64aef8d130daa04ed8191ba2ea1dd7e8.png

hive的优缺点

1) 简单易上手

2) 扩展能力较好

3) 统一的元数据管理

4) 由于是从HDFS中读取数据,所以决定了hive不支持局部的修改和删除,只能整体的覆盖、删除。

hive与关系数据库

    关系数据库里,表的加载模式是在数据加载时候强制确定的,这个就叫“写时模式”,写时模式会在数据加载时候对数据模式进行检查校验的操作。Hive在加载数据时候和关系数据库不同,hive在加载数据时候不会对数据进行检查,也不会更改被加载的数据文件,而检查数据格式的操作是在查询操作时候执行,这种模式叫“读时模式”

    关系数据库一个重要的特点是可以对某一行或某些行的数据进行更新、删除操作,hive不支持对某个具体行的操作,hive对数据的操作只支持覆盖原数据和追加数据。

    Hive也不支持事务和索引。更新、事务和索引都是关系数据库的特征,这些hive都不支持。

    Hive和hbase集成,hbase可以进行快速查询,但是hbase不支持类SQL的语句,那么此时hive可以给hbase提供sql语法解析的外壳,可以用类sql语句操作hbase数据库。

    关系数据库都是为实时查询的业务进行设计的,而hive则是为海量数据做数据挖掘设计的,实时性很差。

    Hive很容易扩展自己的存储能力和计算能力,这个是继承hadoop的,而关系数据库在这个方面要比数据库差很多。

Hive与Hadoop

Hive构建在Hadoop之上

    HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成的 ,所有的数据都是存储在 Hadoop 中;查询计划被转化为 MapReduce 任务,在 Hadoop 中执行(有些查询没有 MR 任务,如:select * from table)。

f0cfd1a271713373311f19c582428b33.png

Hive的查询过程

    在Hive执行下面的查询语句,通过 Hive 的 Client向 Hive 提交 SQL 命令。

9b875b2166f3b3f99e150ac36beb3ffc.png52638b011c0d2aecc51bc02f114eac6f.png

    如果是创建数据表的 DDL,Hive 就会通过执行引擎 Driver 将数据表的信息记录在 Metastore 元数据组件中,这个组件通常用一个关系数据库实现,记录表名、字段名、字段类型、关联 HDFS 文件路径等这些数据库的 Meta 信息。

    如果我们提交的是查询分析数据的 DQL(数据查询语句),Driver 就会将该语句提交给自己的编译器 Compiler 进行语法分析、语法解析、语法优化等一系列操作,最后生成一个 MapReduce 执行计划。然后根据执行计划生成一个 MapReduce 的作业,提交给 Hadoop MapReduce 计算框架处理。

    Hive 内部预置了很多函数,Hive 的执行计划就是根据 SQL 语句生成这些函数的 DAG,然后封装进 MapReduce 的 map 和 reduce 函数中。

    上图的例子中,map 函数调用了三个 Hive 内置函数 TableScanOperator、FilterOperator、FileOutputOperator,就完成了 map 计算,而且无需 reduce 函数。

Hive 如何实现 join 操作

    下面是两个表和一个关联关系的SQL语句如下:

4b6e1c6787a980d19196d301ecb53545.pnga178bc08a48d2575471b47017cb76bf7.png

     这个 SQL 命令也可以转化为 MapReduce 计算&#xff0c;转换的过程如下&#xff0c;因为 join 涉及两张表&#xff0c;来自两个文件&#xff0c;所以需要在 map 输出的时候进行标记&#xff0c;比如来自第一张表的输出 Value 就记录为 <1, X>&#xff0c;这里的 1 表示数据来自第一张表。这样经过 shuffle 以后&#xff0c;相同的 Key 被输入到同一个 reduce 函数&#xff0c;就可以根据表的标记对 Value 数据求笛卡尔积&#xff0c;用第一张表的每条记录和第二张表的每条记录连接&#xff0c;输出就是 join 的结果

3f56357698a645715eaf813fe0a68d73.png

Hive on Other

    后来 Hive 推出了 Hive on Spark&#xff0c;将 Hive 的执行计划转换成 Spark 的计算模型。

    我们还希望在 NoSQL 的数据库上执行 SQL&#xff0c;毕竟 SQL 发展了几十年&#xff0c;积累了庞大的用户群体&#xff0c;很多人习惯了用 SQL 解决问题。于是 Saleforce 推出了 Phoenix&#xff0c;一个执行在 HBase 上的 SQL 引擎。




推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • MR程序的几种提交运行模式本地模型运行1在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行-- ... [详细]
  • 伸缩性|发生_分布式文件系统设计,该从哪些方面考虑?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了分布式文件系统设计,该从哪些方面考虑?相关的知识,希望对你有一定的参考价值。点击上方关注“ ... [详细]
  • 我们在之前的文章中已经初步介绍了Cloudera。hadoop基础----hadoop实战(零)-----hadoop的平台版本选择从版本选择这篇文章中我们了解到除了hadoop官方版本外很多 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打开查询设计器时,ReportBuilder3.0会冻结相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
lilin
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有