hive 基本架构

如下图所示,从逻辑上来看,Hive包含了3大部分。

  • Hive Clients
  • Hive Services
  • Hive Storage and Computing

用户操作Hive的接口主要有三个:CLI,Client 和 WUI。

其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。

Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。而客户端则又可以分为三种Thrift Client,JDBC Client,ODBC Client。

Web Interface是通过浏览器访问Hive。

  • Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
  • 解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行。
  • Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(注意,包含的查询,比如select from tbl不会生成MapRedcue任务)。
    上图中的Driver会处理从应用到metastore到filed system的所有请求,以进行后续操作。

Hive组件

Driver

实现了session handler,在JDBC/ODBC接口上实现了执行和获取信息的API。

Compiler

该组件用于对不同的查询表达式做解析查询,语义分析,最终会根据从metastore中查询到的表和分区元数据生成一个execution plain。

Execution Egine

该组件会执行由compiler创建的execution。其中plan从数据结构上来看,是一个DAG,该组件会管理plan的不同stage与组件中执行这些plan之间的依赖。

Metastore

Hive的metastore组件是hive元数据集中存放地。该组件存储了包括变量表中列和列类型等结构化的信息以及数据仓库中的分区信息(包括列和列类型信息,读写数据时必要的序列化和反序列化信息,数据被存储在HDFS文件中的位置)。

Metastore组件包括两个部分:metastore services和Meta storage database。

  • Metastore database的介质就是关系数据库,例如hive默认的嵌入式磁盘数据库derby,还有mysql数据库。
  • Metastore services是建立在后台数据存储介质(HDFS)之上,并且可以和hive services进行交互的服务组件。
    默认情况下,metastore services和hive services是安装在一起的,运行在同一个进程当中。也可以把metastore services从hive services里剥离出来,将metastore独立安装在一个集群里,hive远程调用metastore services。这样我们可以把元数据这一层放到防火墙之后,客户端访问hive服务,就可以连接到元数据这一层,从而提供了更好的管理性和安全保障。

使用远程的metastore services,可以让metastore services和hive services运行在不同的进程里,这样也保证了hive的稳定性,提升了hive services的效率。

Hive执行过程

流程大致步骤为:

  1. 用户提交查询等任务给Driver。
  2. Driver为查询操作创建一个session handler,接着dirver会发送查询操作到compiler去生成一个execute plan
  3. Compiler根据用户任务去MetaStore中获取需要的Hive的元数据信息。这些元数据在后续stage中用作抽象语法树的类型检测和修剪。
  4. Compiler得到元数据信息,对task进行编译,先将HiveQL转换为抽象语法树,然后将抽象语法树转换成查询块,将查询块转化为逻辑的查询plan,重写逻辑查询plan,将逻辑plan转化为物理的plan(MapReduce), 最后选择最佳策略。
  5. 将最终的plan提交给Driver。
  6. Driver将plan转交给ExecutionEngine去执行,将获取到的元数据信息,提交到JobTracker或者RsourceManager执行该task,任务会直接读取到HDFS中进行相应的操作。
  7. 获取执行的结果。
  8. 取得并返回执行结果。

创建表

解析用户提交的Hive语句->对其进行解析->分解为表、字段、分区等Hive对象

根据解析到的信息构建对应的表、字段、分区等对象,从SEQUENCE_TABLE中获取构建对象的最新的ID,与构建对象信息(名称、类型等等)一同通过DAO方法写入元数据库的表中,成功后将SEQUENCE_TABLE中对应的最新ID+5。

实际上常见的RDBMS都是通过这种方法进行组织的,其系统表中和Hive元数据一样显示了这些ID信息。通过这些元数据可以很容易的读取到数据。

优化器

优化器是一个不断更新的组件,大部分plan的转移都是通过优化器完成的。

  • 将多Multiple join 合并为一个Muti-way join
  • 对join、group-by和自定义的MapReduce操作重新进行划分。
  • 消减不必要的列。
  • 在表的扫描操作中推行使用断言。
  • 对于已分区的表,消减不必要的分区。
  • 在抽样查询中,消减不必要的桶。
  • 优化器还增加了局部聚合操作用于处理大分组聚合和增加再分区操作用于处理不对称的分组聚合。

原文地址:https://blog.51cto.com/xiaolanlan/2443613

时间: 2024-10-03 12:40:49

hive 基本架构的相关文章

Hive基础之Hive体系架构&运行模式&Hive与关系型数据的区别

Hive架构 1)用户接口: CLI(hive shell):命令行工具:启动方式:hive 或者 hive --service cli ThriftServer:通过Thrift对外提供服务,默认端口是10000:启动方式:hive --service hiveserver WEBUI(浏览器访问hive):通过浏览器访问hive,默认端口是9999:启动方式:hive --service hwi 2)元数据存储(Metastore):启动方式:hive -service metastore

深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存(企业Hadoop应用核心产品)

一.本课程是怎么样的一门课程(全面介绍)    1.1.课程的背景       作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统计甚至全由Hive完成,如我所在的电商.       Hive在企业云计算平台发挥的作用和影响愈来愈大,如何优化提速已经显得至关重要.       Hive作业的规模决定着优化层级,一个Hive作业的优化和一万的Hive作业的优化截然不同.       拥有1万多个Hive作业的大电商如何进行Hiv

Hive运行架构及配置部署

Hive 运行架构 由Facebook开源,最初用于解决海量结构化的日志数据统计问题:ETL工具: 构建于Hadoop的HDFS和MapReduce智商,用于管理和查询结构化/非结构化数据的数据仓库: 设计目的是让SQL技能良好,但Java技能较弱的分析师可以查询海量数据: 使用HQL作为查询接口: 使用HDFS作为存储底层: 使用MapReduce作为执行层: 2008年facebook把Hive项目贡献给Apache: 1.Hive的缺点 Hive的HQL表达能力有限:有些复杂运算用HQL不

第53课:Hive 第一课:Hive的价值、Hive的架构设计简介

一. Hive的历史价值 1, 大数据因Hadoop而知名,而Hadoop又因Hive而实用.Hive是Hadoop上的Killer Application,Hive是Hadoop上的数据仓库,同时Hive兼具有数据仓库中的存储和查询引擎.而Spark SQL是一个更加出色和高级的查询引擎,并不提供存储功能.所以Spark SQL无法取代Hive,在现在企业级应用中Spark SQL+Hive成为了业界使用的大数据最为高效和流行的趋势. 2,Hive是Facebook推出的,主要是为了让不懂ja

深入浅出Hive企业级架构优化视频教程

深入浅出Hive企业级架构优化.Hive Sql优化.压缩和分布式缓存(企业Hadoop应用核心产品)课程讲师:Cloudy课程分类:Hadoop适合人群:初级课时数量:10课时用到技术:Hive涉及项目:Hive企业级优化咨询qq:1840215592 一.课程环境:Cloudera Hadoop 4 (Hadoop 2.0)Hive-0.90二.所需技术基础:Hadoop基础.Hive基础.Linux基础,其他不限制(不分Java和.Net方向,皆适合).深入浅出Hive企业级架构优化视频教

Hive(一):架构及知识体系

Hive是一个基于Hadoop的数据仓库,最初由Facebook提供,使用HQL作为查询接口.HDFS作为存储底层.mapReduce作为执行层,设计目的是让SQL技能良好,但Java技能较弱的分析师可以查询海量数据,2008年facebook把Hive项目贡献给Apache.Hive提供了比较完整的SQL功能(本质是将SQL转换为MapReduce),自身最大的缺点就是执行速度慢.Hive有自身的元数据结构描述,可以使用MySql\ProstgreSql\oracle 等关系型数据库来进行存储

详解Hive的架构、工作原理及安装步骤

一.Hive是什么? Hive 是基于 Hadoop 构建的一套数据仓库分析系统,它提供了丰富的 SQL 查询方式来分析存储在 Hadoop 分布式文件系统中的数据, 可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行,通过自己的 SQL 去 查询分析需要的内容,这套 SQL 简称 Hive SQL. 二.理解Hive 架构 Hive 架构可以分为四部分. 用户接口 Hive 对外提供了三种服务模式,即 Hive

详解Hive的架构及安装步骤

一.Hive是什么? Hive 是基于 Hadoop 构建的一套数据仓库分析系统,它提供了丰富的 SQL 查询方式来分析存储在 Hadoop 分布式文件系统中的数据, 可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行,通过自己的 SQL 去 查询分析需要的内容,这套 SQL 简称 Hive SQL. 二.理解Hive 架构 Hive 架构可以分为四部分. 用户接口 Hive 对外提供了三种服务模式,即 Hive

Hive的架构和工作流程

架构 1.hive是数据仓库,在hadoop基础上处理结构化数据:它驻留在hadoop之上,用户对数据的统计,查询和简单的分析操作. 2.hive不是 a.关系型数据库 b.OLTP c.实时查询和行级更新操作 3.hive特点 a.表模型存储在database(关系型)中,处理的数据存储在HDFS上: b.设计模式遵循OLAP c.它提供了一套类SQL的语言(HiveQL or HQL),用于执行查询 d.它是简单的,快速的,可扩展的和易伸缩的 4.hive架构 a.(用户接口)User In

Hive基础架构

Hive 由Facebook开源用于解决海量结构化日志的数据统计: Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL查询功能; 构建在Hadoop之上的数据仓库: * 使用HQL作为查询接口  * 处理的数据存储在HDFS * 分析数据底层实现MapReduce * 执行程序运行的YARN 本质是:将HQL转化成MapReduce程序 灵活性和扩展性比较好,支持UDF,自定义存储格式等. 适合离线数据处理. Hive架构如下图: > 用户接口:Cl