Hive-架构与设计

架构与设计

  • 一、背景和起源
  • 二、框架概述
    • 1.设计特点
  • 三、架构图
    • 1.UI交互层
    • 2.Driver驱动层
    • 3.Compiler
    • 4.Metastore
    • 5.Execution Engine
  • 四、执行流程
    • 1.发起请求
    • 2.获取执行计划
    • 3.获取元数据
    • 4.返回元数据
    • 5.返回执行计划
    • 6.运行执行计划
    • 7.运行结果获取
  • 五、数据模型
    • 1.DataBase数据库
    • 2.Table表
      • 2.1 MANGED_TABLE 内部表
      • 2.2 EXTERNAL_TABLE 外部表
      • 2.3 INDEX_TABLE 索引表
      • 2.4 VIRTUAL_VIEW 视图表
    • 3.Partition分区
      • 3.1 静态分区
      • 3.2 动态分区
    • 4.Bucket桶
  • 总结
  • 参考链接


一、背景和起源

大数据存储和处理框架Hadoop提供了对数据的存储、分析、任务调度的处理。其中的MapReduce可以对数据进行处理和分析的,但是MapReduce的编程比较繁琐并且修改不方便,对于一些单次处理和交互式分析非常不便。为了支持对数据仓库中数据的分析、简化用户使用数仓门槛,基于Hadoop的一套数据仓库分析系统Hive应运而生。Hive将结构化数据文件映射为一张数据库表,提供了丰富的SQL查询方式分析存储在Hadoop分布式文件系统的数据。将查询SQL语句转化成MapReduce任务进行执行。

二、框架概述

1.设计特点

  • 支持通过SQL对数据仓库中数据进行访问,比如提取、转化、加工、分析等
  • 支持将不同数据格式添加数据结构
  • 可以直接访问大数据存储系统中的文件,比如HDFS、HBase等

三、架构图

在这里插入图片描述
Hive是构建在Hadoop之上,会将SQL转化成MapReduce任务在Hadoop集群进行执行,然后将结果保存在HDFS上,整体架构如上。

1.UI交互层

用户提交查询和其他操作

2.Driver驱动层

  • 接受用户sql语句
  • 调用编译器对Sql语句进行编译
  • 调用执行引擎进行任务的执行

3.Compiler

基于Metastore中元数据对语句进行语义分析和解析查询生成执行计划

4.Metastore

存储数仓中表和分区的元数据,包括列信息、列类型信息、序列化器和反序列化器、存储文件等。

5.Execution Engine

hive生成的执行计划是一个由Stages组成的逻辑DAG图,执行引擎主要是将逻辑DAG图在Hadoop上进行调度和执行,最后转化成MapReduce的map task或reduce task进行运算。

四、执行流程

在这里插入图片描述

1.发起请求

UI交互层发起执行请求到Driver驱动层

2.获取执行计划

Driver驱动层将用户请求发送到编译器获取执行计划

3.获取元数据

编译器将sql语句中相关表和分区信息发送到MetaStore获取相关元数据

4.返回元数据

MetaStore返回对应元数据

5.返回执行计划

根据表和分区的元数据对sql的解析和优化,生成逻辑执行计划。该计划是一个DAG图,每个stage对应一个MapReduce的map或者reduce操作。

6.运行执行计划

将执行计划发送到Execution Engine,执行引擎会将逻辑执行计划提交到Hadoop中以MapReduce形式进行执行。

7.运行结果获取

UI交互层获取运行结果。

五、数据模型

hive主要将数据以以下几种数据模型进行组织,分别是DataBase、Table、Partition和Bucket。

1.DataBase数据库

相当于关系型数据中的命名空间,将数据库中数据隔离到不同的数据库模型中。

2.Table表

表是由描述表的元数据和存储的数据组成。数据存储在分布式文件系统中,元数据存储在关系型数据库中。表对应分布式文件系统的一个目录。Hive表分为以下四种:

2.1 MANGED_TABLE 内部表

内部表数据是由hive进行存储和管理的,默认存储位置为/user/hive/warehouse目录。

2.2 EXTERNAL_TABLE 外部表

外部表数据不会存储到hive相关目录下。当删除外部表时,hive只删除表的元数据,不会删除表数据。

2.3 INDEX_TABLE 索引表

索引表是为了提高表某些列的查询速度,包含指定列的值、对应的HDFS文件路径、偏移量的一张表。当查询时可以利用此索引表提高查询速度,避免全表扫描。

2.4 VIRTUAL_VIEW 视图表

视图是一组数据的逻辑表示,是sql语句的结果集

3.Partition分区

分区是根据表的某列值划分为不同分区,分区对应分布式系统中表目录下的一个子目录。分区基于分区键把具有相同分区键值的数据存储在一个子目录下。分区有两种类型:

3.1 静态分区

静态分区的分区数量和分区值都是固定的,新增分区和加载数据到分区时,需要提前指定分区名。

3.2 动态分区

动态分区的分区数量和分区值都是不确定的,会根据数据值自动创建新的分区。

4.Bucket桶

hive还支持将表或者分区中数据更细粒度的划分为桶,每个桶的数据对应分布式系统中子目录下的一个文件。

分桶表创建命令:

CREATE TABLE table_namePARTITIONED BY (partition1 data_type, partition2 data_type,.) CLUSTERED BY (column_name1, column_name2,) SORTED BY (column_name [ASC|DESC],)] INTO num_buckets BUCKETS;

总结

Hive是一个基于Hadoop的数仓分析工具,将分布式系统中的数据映射成结构化数据。提供丰富的SQL查询方式对数仓中的数据进行访问。一般不会存储数据、只会保存元数据到Hive中。Hive根据元数据信息将查询语句转化成执行计划,此执行计划由stage组成的DAG图,调用Hadoop中的MapReduce运行执行计划得到对应结果。


参考链接

1.Apache Hive
2.Hive Home
3.Hive Architecture

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/255368.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java并发基础:LinkedBlockingDeque全面解析!

内容概要 LinkedBlockingDeque提供了线程安全的双端队列实现,它支持在队列两端高效地进行插入和移除操作,同时具备阻塞功能,能够很好地协调生产者与消费者之间的速度差异,其内部基于链表结构,使得并发性能优异&#x…

【开源项目阅读】Java爬虫抓取豆瓣图书信息

原项目链接 Java爬虫抓取豆瓣图书信息 本地运行 运行过程 另建项目,把四个源代码文件拷贝到自己的包下面 在代码爆红处按ALTENTER自动导入maven依赖 直接运行Main.main方法,启动项目 运行结果 在本地磁盘上生成三个xml文件 其中的内容即位爬取…

Stable Diffusion 模型下载:RealCartoon-Realistic - V13

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十下载地址模型介绍 该检查点是 RealCartoon3D 检查点的一个分支。这个目标是在背景和人物中产生更“真实”的外观。我试图避免这个模型中更多的动漫、卡通和“完美”外观。这是一个肯

【算法】排序详解(快速排序,堆排序,归并排序,插入排序,希尔排序,选择排序,冒泡排序)

目录 排序的概念: 排序算法的实现: 插入排序: 希尔排序: 选择排序: 堆排序: 冒泡排序: 快速排序: 快速排序的基本框架: 1.Hoare法 2. 挖坑法 3.前后指针法 快…

优质项目追踪平台一览:助力项目管理与监控

项目追踪平台是现代项目管理中不可或缺的工具,它可以帮助团队高效地跟踪和管理项目进度、任务和资源分配。在当今快节奏的商业环境中,有许多热门的项目追踪平台可供选择。 本文总结了当下热门的项目追踪平台,供您参考~ 1、Zoho Projects&…

【Vue】Vue基础入门

📝个人主页:五敷有你 🔥系列专栏:Vue ⛺️稳重求进,晒太阳 Vue概念 是一个用于构建用户界面的渐进式框架优点:大大提高开发效率缺点:需要理解记忆规则 创建Vue实例 步骤: …

SpringBoot-基础篇03

之前搭建了整个开发环境实现了登录注册,springBoot整合mybatis完成增删改查,今天完成分页查询,使用阿里云oss存储照片等资源,后期会尝试自己搭建分布式文件系统来实现。 一,SpringBootMybatis完成分页查询 1&#xff…

npm 上传一个自己的应用(3) 在项目中导入及使用自己上传到NPM的工具

上文 npm 上传一个自己的应用(2) 创建一个JavaScript函数 并发布到NPM 我们创建了一个函数 并发上了npm 最后 我们这里 我们可以看到它的安装指令 这里 我们可以打开一个vue项目 终端输入 我们的安装指令 npm i 自己的包 如下代码 npm i grtest我们在 node_modules目录 下…

【Linux】构建模块

🔥博客主页:PannLZ 🎋系列专栏:《Linux系统之路》 🥊不要让自己再留有遗憾,加油吧! 文章目录 构建第一个模块1模块的makefile2内核树内构建3内核树外构建 构建第一个模块 可以在两个地方构建模…

【Spring】Spring 对 Ioc 的实现

一、Ioc 控制反转 控制反转是一种思想 控制反转是为了降低程序耦合度,提高程序扩展力,达到 OCP 原则,达到 DIP 原则 控制反转,反转的是什么? 将对象的创建权利交出去,交给第三方容器负责 将对象和对象之…

Windows下搭建Redis Sentinel

下载安装程序 下载Redis关于Windows安装程序,下载地址 下载成功后进行解压,解压如下: 配置redis和sentinel 首先复制三份redis.windows.conf,分别命名为:redis.6379.conf、redis.6380.conf、redis.6381.conf&…

C++笔记之regex(正则表达式)

C++笔记之regex(正则表达式) ——2024-02-10 ——《C++标准库》(第2版,侯捷译) Page 717 code review! 文章目录 C++笔记之regex(正则表达式)例1:使用正则表达式进行搜索(`std::regex_search`)例2:使用正则表达式进行全文匹配(`std::regex_match`)例3:使用正则表达式…

01-Spring实现重试和降级机制

主要用于在模块调用中,出现失败、异常情况下,仍需要进行重复调用。并且在最终调用失败时,可以采用降级措施,返回一般结果。 1、重试机制 我们采用spring 提供的retry 插件,其原理采用aop机制,所以需要额外…

分享3款开源免费好用的Docker可视化管理工具安装部署教程

文章目录 1.前言2.Docker Desktop3.Portainer3.1 Portainer默认英文版本安装3.2 Portainer汉化版本安装3.3官方镜像说明3.3.1ssl访问3.3.2Nginx反代3.3.3Nginx反代设置子目录3.3.4docker-compose部署 3.4登录 4.DockerUI4.1简介4.2项目地址4.3部署启动命令4.4登录4.5首页 5.总结…

vue day06

1、路由模块封装 2、声明式导航 实现导航高亮效果 直接通过这两个类名对相应标签设置样式 点击a链接进入my页面时,a链接 我的音乐高亮,同时my下的a、b页面中的 我的音乐也有router-link-active类,但没有精确匹配的类(只有my页…

Android 粒子喷泉动效

一、前言: 在学习open gl es实现动效的时候,打算回顾了一下用普通的2D坐标系实现粒子效果和 open gl 3d 坐标系的区别,以及难易程度,因此本篇以Canvas 2D坐标系实现了一个简单的demo。 粒子动效原理: 粒子动效本质上…

读完《王志纲谈生涯规划》后感

(点击即可收听) 经常在短视频刷到,这位王志钢老师,在微信读书里面也看到过,于是拜读了一下,这是一本生涯规划书,但更多的是他个人经历的一个描述 有大道理,有些话还是值得认可的 比如:他谈到,想要减少个人乃至社会的悲剧,最好的办法就是尽自己…

svg基础(八)滤镜-feTurbulence(湍流)

feTurbulence:湍流滤镜 湍流滤镜,不稳定气流,能够实现半透明的烟熏或波状图像。 通常用于实现一些特殊的纹理。滤镜利用 Perlin 噪声函数创建了一个图像。噪声在模拟云雾效果时非常有用,能产生非常复杂的质感,利用它可…

【Unity】QFramework通用背包系统优化:使用Odin优化编辑器

前言 在学习凉鞋老师的课程《QFramework系统设计:通用背包系统》第四章时,笔者使用了Odin插件,对Item和ItemDatabase的SO文件进行了一些优化,使物品页面更加紧凑、更易拓展。 核心逻辑和功能没有改动,整体代码量减少…

[C++] 如何使用Visual Studio 2022 + QT6创建桌面应用

安装Visual Studio 2022和C环境 [Visual Studio] 基础教程 - Window10下如何安装VS 2022社区版_visual studio 2022 社区版-CSDN博客 安装QT6开源版 下载开源版本QT Try Qt | 开发应用程序和嵌入式系统 | Qt Open Source Development | Open Source License | Qt 下载完成&…