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_name

PARTITIONED 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

fast.ai 机器学习笔记(四)

机器学习 1:第 11 课 原文:medium.com/hiromi_suenaga/machine-learning-1-lesson-11-7564c3c18bbb 译者:飞龙 协议:CC BY-NC-SA 4.0 来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它,这些笔记将继续…

[office] Excel2019函数MAXIFS怎么使用?Excel2019函数MAXIFS使用教程 #知识分享#微信#经验分享

Excel2019函数MAXIFS怎么使用?Excel2019函数MAXIFS使用教程 Excel2019函数MAXIFS怎么使用?这篇文章主要介绍了Excel2019函数MAXIFS使用教程,需要的朋友可以参考下 在今年,Excel除了新版本Excel2019,其中有一个新功能MAXIFS函数&am…

python_django高校运动会成绩管理系统4o4c3

田径运动会报名管理系统就是给学生进行网上报名,管理员管理报名信息的一种通用管理平台,从而方便管理人员对运动会的日常报名工作的管理。本系统的前台功能模块包括系统的基本操作、最新公告、运动项目和报名项目;系统的后台功能模块包括系统…

opencv计算机视觉

树莓派主机的无键盘解决 进入控制面板,更改适配器设置,WIFI属性,勾选 1.将网线两头分别接入树莓派和笔记本的网线接口 2.在无线连接属性那里勾选允许其他用户连接 3.运行cmd使用arp -a查看树莓派ip地址,或者使用ipscanner查看 cmd…

Nginx实战:1-安装搭建

目录 前言 一、yum安装 二、编译安装 1.下载安装包 2.解压 3.生成makefile文件 4.编译 5.安装执行 6.执行命令软连接 7.Nginx命令 前言 nginx的安装有两种方式: 1、yum安装:安装快速,但是无法在安装的时候带上想要的第三方包 2、…

巧用liteflow,告别if else,SpringBoot整合liteflow

假设有一个三个原子业务&#xff0c;吃饭、喝水、刷牙。 现在有三个场景&#xff0c;分别是 场景A: 吃饭->刷牙->喝水 官网地址&#xff1a;https://liteflow.cc/ 1.添加依赖&#xff1a; <dependency><groupId>com.yomahub</groupId><artifactI…

FPGA_工程_基于rom的vga显示

一 框图 二 代码修改 module Display #(parameter H_DISP 1280,parameter V_DISP 1024,parameter H_lcd 12d150,parameter V_lcd 12d150,parameter LCD_SIZE 15d10_000 ) ( input wire clk, input wire rst_n, input wire [11:0] lcd_xpos, //lcd horizontal coo…

python+django+vue汽车票在线预订系统58ip7

本课题使用Python语言进行开发。基于web,代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中 使用说明 使用Navicat或者其它工具&#xff0c;在mysql中创建对应名称的数据库&#xff0c;并导入项目的sql文件&#xff1b; 使用PyChar…

【Linux】学习-基础IO拓展篇

Linux基础IO拓展篇—详解文件系统 理解文件系统 在Linux基础IO篇中&#xff0c;我们站在用户的视角对文件进行了理解&#xff0c;主要是针对被打开的文件&#xff0c;那么有没有没有被打开的文件呢&#xff1f;当然有&#xff01;今天我们换个视角&#xff0c;来站在系统的角…

XSS-Lab

1.关于20关的payload合集。 <script>alert(1)</script> "><script>alert(1)</script> onclickalert(1) " onclick"alert(1) "><a href"javascript:alert(1)"> "><a HrEf"javascript:alert…

滑块验证码识别代码分享

平时我们开发爬虫会遇到各种各样的滑动验证码&#xff0c;如下图所示&#xff1a; 为了解决这个问题&#xff0c;我写了一个通用的滑块验证码识别代码&#xff0c;主要是分析图片&#xff0c;然后计算出滑块滑动的像素距离。但是像素距离大多数情况下都不会等于滑动距离&#x…

机器学习系列——(二十一)神经网络

引言 在当今数字化时代&#xff0c;机器学习技术正日益成为各行各业的核心。而在机器学习领域中&#xff0c;神经网络是一种备受瞩目的模型&#xff0c;因其出色的性能和广泛的应用而备受关注。本文将深入介绍神经网络&#xff0c;探讨其原理、结构以及应用。 一、简介 神经网…

一、基础算法之排序、二分、高精度、前缀和与差分、双指针算法、位运算、离散化、区间合并内容。

1.快速排序 算法思想&#xff1a;选择基准元素&#xff0c;比基准元素小的放左边&#xff0c;比基准元素大的放右边。每趟至少一个元素排好。 每一趟实现步骤&#xff1a; low>high&#xff0c;返回&#xff0c;排序完成选取基准元素xa[low],ilow,jhigh当i<j时&#x…

visual studio和cmake如何编译dlib库

官网 dlib C Library 对应的是最新版本&#xff0c;只能用到vs2015版本及以后 如果使用vs2013&#xff0c;所以需要下载vs2013可用的版本。 就是说dlib版本与vs版本有对应关系 所有版本 dlib C Library - Browse /dlib at SourceForge.net Releases davisking/dlib GitHu…

[word] word如何打印背景和图片? #微信#其他#经验分享

word如何打印背景和图片&#xff1f; 日常办公中会经常要打印文件的&#xff0c;其实在文档的打印中也是有很多技巧的&#xff0c;可以按照自己的需求设定&#xff0c;下面给大家分享word如何打印背景和图片&#xff0c;一起来看看吧&#xff01; 1、打印背景和图片 在默认的…

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

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

【JAVA WEB】 百度热榜实现 新闻页面 Chrome 调试工具

目录 百度热榜 新闻页面 Chrome 调试工具 --查看css属性 打开调试工具的方式 标签页含义 百度热榜 实现效果&#xff1a; 实现代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"vi…

Linux第45步_通过搭建“DNS服务器”学习图形化配置工具

学习的意义&#xff1a;通过搭建“DNS服务器”&#xff0c;来学习“图形化配置工具”。“DNS服务器”&#xff0c;我们用不到&#xff0c;但为后期移植linux系统服务&#xff0c;因为在移植系统时&#xff0c;需要用到这个“图形化配置工具”。 1、“menuconfig图形化配置工具…

Spring Boot 笔记 005 环境搭建

1.1 创建数据库和表&#xff08;略&#xff09; 2.1 创建Maven工程 2.2 补齐resource文件夹和application.yml文件 2.3 porn.xml中引入web,mybatis,mysql等依赖 2.3.1 引入springboot parent 2.3.2 删除junit 依赖--不能删&#xff0c;删了会报错 2.3.3 引入spring web依赖…

STM32F1 - 源码解析SystemInit()

SystemInit 1> SystemInit( )调用位置2> SystemInit ()函数2> SystemInit ()函数 1> SystemInit( )调用位置 startup_stm32f10x_hd.s文件中&#xff1a; ; Reset handler Reset_Handler PROCEXPORT Reset_Handler [WEAK]IMPORT __mainIMPORT Sy…