Hive原理剖析

这篇具有很好参考价值的文章主要介绍了Hive原理剖析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

Hive是建立在Hadoop上的数据仓库框架,提供大数据平台批处理计算能力,能够对结构化/半结构化数据进行批量分析汇总完成数据计算。提供类似SQL的Hive Query Language语言操作结构化数据,其基本原理是将HQL语言自动转换成MapReduce任务,从而完成对Hadoop集群中存储的海量数据进行查询和分析。有关Hive表的更多信息,请参阅开源社区Hive教程。

Hive主要特点如下:

  • 海量结构化数据分析汇总。
  • 将复杂的MapReduce编写任务简化为SQL语句。
  • 灵活的数据存储格式,支持JSON,CSV,TEXTFILE,RCFILE,SEQUENCEFILE,ORC(Optimized Row Columnar)这几种存储格式。

二、Hive结构

Hive为单实例的服务进程,提供服务的原理是将HQL编译解析成相应的MapReduce或者HDFS任务,如下图所示为Hive的结构概图。
Hive原理剖析,hive,hadoop,数据仓库

名称 说明
HiveServer 一个集群内可部署多个HiveServer,负荷分担。对外提供Hive数据库服务,将用户提交的HQL语句进行编译,解析成对应的Yarn任务或者HDFS操作,从而完成数据的提取、转换、分析。
MetaStore 1.一个集群内可部署多个MetaStore,负荷分担。提供Hive的元数据服务,负责Hive表的结构和属性信息读、写、维护和修改。2.提供Thrift接口,供HiveServer、Spark、WebHCat等MetaStore客户端来访问,操作元数据。
WebHCat 一个集群内可部署多个WebHCat,负荷分担。提供Rest接口,通过Rest执行Hive命令,提交MapReduce任务。
Hive客户端 包括人机交互命令行Beeline、提供给JDBC应用的JDBC驱动、提供给Python应用的Python驱动、提供给Mapreduce的HCatalog相关JAR包。
ZooKeeper集群 ZooKeeper作为临时节点记录各HiveServer实例的IP地址列表,客户端驱动连接Zookeeper获取该列表,并根据路由机制选取对应的HiveServer实例。
HDFS/HBase集群 Hive表数据存储在HDFS集群中。
MapReduce/Yarn集群 提供分布式计算服务:Hive的大部分数据操作依赖MapReduce,HiveServer的主要功能是将HQL语句转换成MapReduce任务,从而完成对海量数据的处理。

HCatalog建立在Hive Metastore之上,具有Hive的DDL能力。从另外一种意义上说,HCatalog还是Hadoop的表和存储管理层,它使用户能够通过使用不同的数据处理工具(比如Pig和MapReduce),更轻松地在网格上读写HDFS上的数据,HCatalog还能为这些数据处理工具提供读写接口,并使用Hive的命令行接口发布数据定义和元数据探索命令。此外,经过封装这些命令,WebHcat Server还对外提供了RESTful接口,如下图所示。
Hive原理剖析,hive,hadoop,数据仓库
Hive作为一个基于HDFS和MapReduce架构的数据仓库,其主要能力是通过对HQL(Hive Query Language)编译和解析,生成并执行相应的MapReduce任务或者HDFS操作。Hive与HiveQL相关信息,请参考HiveQL 语言手册。

如下图为Hive的结构简图。

  • Metastore - 对表,列和Partition等的元数据进行读写及更新操作,其下层为关系型数据库。
  • Driver - 管理HiveQL执行的生命周期并贯穿Hive任务整个执行期间。
  • Compiler - 编译HiveQL并将其转化为一系列相互依赖的Map/Reduce任务。
  • Optimizer - 优化器,分为逻辑优化器和物理优化器,分别对HiveQL生成的执行计划和MapReduce任务进行优化。
  • Executor - 按照任务的依赖关系分别执行Map/Reduce任务。
  • ThriftServer - 提供thrift接口,作为JDBC的服务端,并将Hive和其他应用程序集成起来。
  • Clients - 包含WebUI和JDBC接口,为用户访问提供接口。
    Hive原理剖析,hive,hadoop,数据仓库

三、Hive CBO原理介绍

CBO,全称是Cost Based Optimization,即基于代价的优化器。

其优化目标是:

在编译阶段,根据查询语句中涉及到的表和查询条件,计算出产生中间结果少的高效join顺序,从而减少查询时间和资源消耗。

Hive中实现CBO的总体过程如下:

Hive使用开源组件Apache Calcite实现CBO。首先SQL语句转化成Hive的AST,然后转成Calcite可以识别的RelNodes。Calcite将RelNode中的Join顺序调整后,再由Hive将RelNode转成AST,继续Hive的逻辑优化和物理优化过程。流程图如下图所示:
Hive原理剖析,hive,hadoop,数据仓库
Calcite调整Join顺序的具体过程如下:

  1. 针对所有参与Join的表,依次选取一个表作为第一张表。
  2. 依据选取的第一张表,根据代价选择第二张表,第三张表。由此可以得到多个不同的执行计划。
  3. 计算出代价最小的一个计划,作为最终的顺序优化结果。

代价的具体计算方法:

当前版本,代价的衡量基于Join出来的数据条数:Join出来的条数越少,代价越小。Join条数的多少,取决于参与join的表的选择率。表的数据条数,取自表级别的统计信息。

过滤条件过滤后的条数,由列级别的统计信息,max,min,以及NDV(Number of Distinct Values)来估算出来。

例如存在一张表table_a,其统计信息如下:数据总条数1000000,NDV 50,查询条件如下:

Select * from table_a where colum_a='value1';

则估算查询的最终条数为1000000 * 1/50 = 20000条,选择率为2%。
以下以TPC-DS Q3为例来介绍CBO是如何调整Join顺序的。

select 
    dt.d_year, 
    item.i_brand_id brand_id, 
    item.i_brand brand, 
    sum(ss_ext_sales_price) sum_agg 
from 
    date_dim dt, 
    store_sales, 
    item 
where 
    dt.d_date_sk = store_sales.ss_sold_date_sk 
    and store_sales.ss_item_sk = item.i_item_sk 
    and item.i_manufact_id = 436 
    and dt.d_moy = 12 
group by dt.d_year , item.i_brand , item.i_brand_id 
order by dt.d_year , sum_agg desc , brand_id 
limit 10;

语句解释:这个语句由三张表来做Inner join,其中store_sales是事实表,有约2900000000条数据,date_dim是维度表,有约73000条数据,item是维度表,有约18000条数据。每一个表上都有过滤条件,其Join关系如所下图示:
Hive原理剖析,hive,hadoop,数据仓库
CBO应该先选择能起到最好过滤效果的表来join。

通过分析min,max,NDV,以及数据条数。CBO估算出不同维度表的选择率,详情如下表所示。

表名 原始数据条数 过滤后数据条数 选择率
date_dim 73000 6200 8.5%
item 18000 19 0.1%

上述表格获取到原始表的数据条数,估算出过滤后的数据条数后,计算出选择率=过滤后条数/原始条数。
从上表可以看出,item表具有较好的过滤效果,因此CBO将item表的join顺序提前。
CBO未开启时的Join示意图如下图所示:
Hive原理剖析,hive,hadoop,数据仓库
CBO开启后的Join示意图如下图所示:
Hive原理剖析,hive,hadoop,数据仓库
可以看出,优化后中间结果由495000000条减少到了2900000条,执行时间也大幅减少。

四、Hive与HDFS组件的关系

Hive是Apache的Hadoop项目的子项目,Hive利用HDFS作为其文件存储系统。Hive通过解析和计算处理结构化的数据,Hadoop HDFS则为Hive提供了高可靠性的底层存储支持。Hive数据库中的所有数据文件都可以存储在Hadoop HDFS文件系统上,Hive所有的数据操作也都是通过Hadoop HDFS接口进行的。

五、Hive与MapReduce组件的关系

Hive的数据计算依赖于MapReduce。MapReduce也是Apache的Hadoop项目的子项目,它是一个基于Hadoop HDFS分布式并行计算框架。Hive进行数据分析时,会将用户提交的HQL语句解析成相应的MapReduce任务并提交MapReduce执行。

六、Hive与Tez的关系

Tez是Apache的开源项目,它是一个支持有向无环图的分布式计算框架,Hive使用Tez引擎进行数据分析时,会将用户提交的HQL语句解析成相应的Tez任务并提交Tez执行。

七、Hive与DBService的关系

Hive的MetaStore(元数据服务)处理Hive的数据库、表、分区等的结构和属性信息(即Hive的元数据),这些信息需要存放在一个关系型数据库中,由MetaStore管理和处理。在产品中,Hive的元数据由DBService组件存储和维护,由Metadata组件提供元数据服务。

八、Hive与Elasticsearch的关系

Hive可以将Elasticsearch作为其扩展的文件存储系统。Hive通过集成Elasticsearch提供的Elasticsearch-Hadoop插件,建立外表,将表数据存储在Elasticsearch里,实现Hive读取和写入Elasticsearch索引数据的目的。文章来源地址https://www.toymoban.com/news/detail-685504.html

到了这里,关于Hive原理剖析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hadoop、Spark和Hive调优优化原理

    作者:禅与计算机程序设计艺术 随着互联网和大数据的普及以及处理器性能的提升,当时的技术已经远远超过了当时能够想象的范围。这段时间MapReduce计算框架已经成为一个主流的开源计算框架,包括Hadoop、Pig、Hive、Mahout、Storm等。 2010年Apache Spark横空出世,基于内存计算框

    2024年02月06日
    浏览(43)
  • 【Hadoop】-Apache Hive使用语法与概念原理[15]

    创建数据库 create database if not exists myhive; 使用数据库 use myhive; 查看数据库详细信息 desc database myhive; 数据库本质上就是在HDFS之上的文件夹。 默认数据库的存放路径是HDFS的: /user/hive/warehouse内 创建数据库并指定hdfs存储位置 create database myhive2 location \\\'/myhive2\\\'; 使用location

    2024年04月28日
    浏览(30)
  • Hive数据仓库---Hive的安装与配置

    Hive 官网地址:https://hive.apache.org/ 下载地址:http://www.apache.org/dyn/closer.cgi/hive/ 把安装文件apache-hive-3.1.2-bin.tar.gz上传到master节点的/opt/software目 录下,执行以下命令把安装文件解压到/opt/app目录中 进入/opt/app目录,为目录apache-hive-3.1.2-bin建立软件链接 即输入hive就相当于输入a

    2024年02月02日
    浏览(40)
  • hive数据仓库工具

    1、hive是一套操作数据仓库的应用工具,通过这个工具可实现mapreduce的功能 2、hive的语言是hql[hive query language] 3、官网hive.apache.org 下载hive软件包地址  Welcome! - The Apache Software Foundation https://archive.apache.org/ 4、hive在管理数据时分为元数据和真数据,其中元数据要保存在数据库中

    2024年02月04日
    浏览(34)
  • Hive数据仓库

    数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。 数据仓库的目的是构建面相分析的集成化数据环境,分析结果为企业提供决策支持(Decision Support)。 数据仓库本身并不“产生”任何数据,其数据来源不同外部系统; 同时数据仓库

    2024年02月15日
    浏览(39)
  • Hive数据仓库简介

    Hive起源于Facebook,Facebook公司有着大量的日志数据,而Hadoop是实现了MapReduce模式开源的分布式并行计算的框架,可轻松处理大规模数据。然而MapReduce程序对熟悉Java语言的工程师来说容易开发,但对于其他语言使用者则难度较大。因此Facebook开发团队想设计一种使用SQL语言对日

    2024年02月15日
    浏览(55)
  • 数据仓库 & Apache Hive

    目录 一、数据分析 1、数据仓库 1.1、数仓专注分析 1.2、数仓主要特征 1.3、数据仓库主流开发语言--SQL 2、Apache Hive 2.1、为什么使用Hive? 2.2、Hive和Hadoop关系 2.3、Hive架构图、各组件功能 2.4、Hive安装部署 2.4.1、Hive概念介绍 2.4.2、安装前准备     数据仓库 (英语:Data Warehous

    2024年01月22日
    浏览(46)
  • hive数据仓库课后答案

    一、 填空题 1.数据仓库的目的是构建面向     分析         的集成化数据环境。 2.Hive是基于     Hadoop         的一个数据仓库工具。 3.数据仓库分为3层,即      源数据层        、     数据应用层        和数据仓库层。 4.数据仓库层可以细分为      明细层

    2023年04月08日
    浏览(46)
  • 【Hive】——数据仓库

    数据仓库(data warehouse):是一个用于存储,分析,报告的数据系统 目的:是构建面向分析的集成化数据环境,分析结果为企业提供决策支持 特点: 数据仓库本身不产生任何数据,其数据来源于不同外部系统 数据仓库也不需要消费任何的书,其结果开放给各个外部应用使用

    2024年02月04日
    浏览(39)
  • Hive 数据仓库介绍

    目录 ​编辑 一、Hive 概述 1.1 Hive产生的原因 1.2 Hive是什么? 1.3 Hive 特点 1.4 Hive生态链关系 二、Hive架构 2.1 架构图 2.2 架构组件说明 2.2.1 Interface 2.2.1.1 CLI 2.2.1.2 JDBC/ODBC 2.2.1.3 WebUI 2.2.2 MetaData 2.2.3 MetaStore 2.2.4 Hiveserver2 2.2.5 Driver 2.2.5.1 解释器 2.2.5.2 编译器 2.2.5.3 优化器 2.2.5.4 执行

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包