Hive进阶

目录

一、MapReduce的计算过程

二、Yarn的资源调度

yarn的资源调度策略

三、Hive的语法树

四、Hive配置优化

五、数据开发

六、数据仓库

七、数据仓库开发流程

八、数仓分层

九、ETL和ELT


一、MapReduce的计算过程

分布式计算框架

需要编写代码执行,执行时会数据所在服务器上运行相同的计算代码

计算过程分为map 和reduce过程

map对多份数据进行拆分计算

reduce将分开的map结果合并一起计算

map的计算程序数量由文件块个数据决定,每个map计算一个块的数据

reduce的个数默认是一个;在进行数据拆分存储时,reduce个数由分区数和分桶数决定

map将数据传递给reduce过程称为shuffle过程

包含 分区,排序,合并

Map阶段

1-按照块数量进行split的块数据读取

2-split切割后的数据传递给对应的map进行处理,会对数据转为kv (张三,1) (张三,1),(李四,1)

3-map将处理的后的数据写入buffer缓存区

4-对缓冲区内的数据进行spill溢出(读取缓冲区内的数据)

5-对读取的数据进行分区,将数据拆分多份

6-对每份拆分的数据进行排序 sort

7-将拆分的数据写入不同的文件

8-在将每次溢出的数据合并merge在一起,保存同一文件,文件是临时文件,计算后会删除

Reduce阶段

1-根据的分区数创建出多个reduce

2-每个reduce从不同的map中fetch获取相同分区的文件数据

3-在将fetch后的文件合并,对合并后的数据进行排序

4-reduce对合并后的文件数据进行计算

5-reduce对结果输出到hdfs的目录下

二、Yarn的资源调度

分布式资源调度,管理整个hadoop集群的所有服务器资源

6.7章节

  • ResourceManger

    • 负责处理所有计算资源申请

  • NodeManager

    • 负责资源空间(container)的创建

  • ApplicationMaster

    • 管理计算任务,只有产生了mapreduce计算才会运行ApplicationMaster

    • 负责具体的资源分配

      • map使用多少

      • reduce使用多少

1-mapreduce提交计算任务给RM(ResourceManager)

2-RM中的applicationmanager负责创建applicationMaster进程

3-applicationMaster和applicationmanager保持通讯

4-applicationMaster找RM中的ResourceScheduler(资源调度器)申请计算需要的资源

5-applicationMaster通知对应的NodeManger创建资源空间container

6-在资源空间中先运行map阶段的计算,先运行reduce阶段的计算

7-map和reduce运行期间会将自身状态信息汇报给applicationMaster

8-计算完成后,applicationMaster通知NodeManger释放资源

9-资源释放后再通知applicationmanager把自身(applicationMaster)关闭释放资源

yarn的资源调度策略

当有多个计算任务同时请求yarn进行计算,如何分配资源给每个计算任务?

  • 先进先出

    • 谁先抢到资源谁使用所有资源

    • 资源利用效率低

    • 如果遇到一个计算时间较长的任务,保资源占用后。其他的任务就无法计算

  • 容量调度

    • 将资源分成多份

      • 不同计算任务使用不同的资源大小

  • 公平调度

    • 资源全部给一个计算任务使用,但是当计算任务中的某个map或reduce计算完成后,可以将自身资源释放掉给其他计算任务使用

      • 5个map,其中有两个map计算完成,就可以先释放掉两个资源,给他任务使用,不同等待所有任务计算完成在释放

三、Hive的语法树

  • 解析器

    • 解析sql关键词转为语法数据

  • 分析器

    • 分析语法格式,字段类型等是否正确

  • 优化器

    • 谓词下推

      • 调整jion和where执行顺序

    • 列值裁剪

  • 执行器

    • 将语法中的逻辑转为mapreduce的计算java代码交给MR执行

四、Hive配置优化

hive中有三种配置方式

  • 配置文件配置

    • hive的安装目录下的conf目录中的hive-site.xml

    • 全局有效,启动hive后会自动使用配置文件中的配置

    • 文件格式xml

  • hive指令配置

nohup hive --service hiveserve2 --hiveconf 'hive.exec.dynamic.partition.mode=nostrict' &
  • set配置

    • 在sql的操作界面设置

set hive.exec.dynamic.partition.mode=nostrict;
set hive.exec.dynamic.partition.mode;

优先级: set配置 > hive指令配置 > 配置文件

set配置只在当前操作界面生效,创建新的连接窗口就是失效了

日常开发中为了减少配置信息的影响,谁开发谁设置,采用set方式

hive的配置属性信息 Configuration Properties - Apache Hive - Apache Software Foundation

五、数据开发

数据开发主要分两种

  • 操作型处理,叫联机事务处理OLTP(On-Line Transaction Processing)

    • 对数据进行事务操作,保证数据操作的安全性

    • 事务特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

    • 原子性:一个sql语句的执行是不可拆分的,能完整执行得到结果,不被抢占资源

      • select * from (select * from tb2) tb;

    • 一致性

      • 多表数据写入时,数据是一致性

        • 订单表

          • 小米手机 1

        • 商品表

          • 小米手机 99

    • 隔离性

      • 程序员张三 update from order set stock=old_stock-num where id=1

        • 在更新数据之前会先查询剩余库存的

      • 程序员李四 update from order set stock=90 where id=1

      • 保证每个sql执行的任务是独立的,此时任务就要按顺序执行语句

    • 持久性

      • 数据会持久存储在磁盘上

    • 业务开发使用到数据库都属于联机事务处理

      • 业务开发(网站或程序)进行的数据操作对安全性要求比较高,所有采用的数据操作方式是联机事务处理

  • 分析型处理,叫联机分析处理OLAP(On-Line Analytical Processing)

    • 大数据的数据开发主要进行的是联机分析处理

      • 对数据进行查询计算,得到结果进行分析

      • 数据一般是一次写入,多次读取

      • 大数据开发不涉及数据的删除,也不修改数据

六、数据仓库

数据仓库就是对公司的过往历史数据进行计算分析,为公司决策提供数据支撑

历史数据的数据量比较大,就需要采用大数据技术实现数据仓库开发

使用HiveSQL对海量数据采用结构化数据方式进行计算

数仓开发本质就是将文件数据转为了结构化数据进行分析计算的

数仓特征

  • 面向主题的(Subject-Oriented )

    • 根据分析内容采集相关数据进行计算

    • 每个分析方向就是一个主题

  • 集成的(Integrated)

    • 将相关主题的数据收集在一起进行计算,形成一个大的宽表

    • 销售主题开发

      • 订单表,订单商品表,订单评价,退款订单表

  • 非易失的(Non-Volatile)

    • 数仓数据不容易丢失,也不会进行删除和修改

  • 时变的(Time-Variant )

    • 随着分析需求的改变,数仓中的数据也在不断变化,随着时间推移,统计的字段计算数据也在发生变化

    • 用户表 用户名,用户性别,用户年龄,用户地址,用户手机号

七、数据仓库开发流程

  • 设计主题计算需求

    • 数据分析师或者数据产品经理

  • 数据来源

    • Mysql中的业务数据

    • 文件数据 excel文件,csv文件,json,log

  • 采集数据源数据

    • kettle

    • sqoop

    • datax

    • 代码采集

  • 对采集的数据进行清洗转化,将处理的后的数据写入到hdfs中

    • 数据采集时单独岗位

      • ETL开发工程师

  • 数据的计算

    • mapreduce --> hiveSQL

    • spark

    • flink

    • 数据计算和结果保存属于数仓开发岗

  • 将计算的结果数据存储到指定位置

    • hdfs

    • habse

    • es

    • Mysql

    • 数据计算和结果保存属于数仓开发岗

  • 对结果数据进行BI展示

    • fineBI

    • powerBI

    • superset

    • BI工程师

八、数仓分层

将数据的计算过程拆分成多个部分就是数仓分层

分层实现就是创建不同数据库

数仓最基本的三个分层

  • ODS(old data service)

    • 保存原始数据,采集清洗后的数据会被写入ods层

    • create databases ods;

  • DW(Data WareHouse)

    • 数仓开发层,对数据进行计算

    • create databases dw;

  • APP(application)

    • 结果数据层

    • 不同主题下的数据保存在对应表目录下

    • create databases app;

对dw层可以进行分层的拆分

dwb 基础数据 在这一层进行数据的过滤

dwd 数据详情层 进行数据的关联

对数据的计算流程拆分后,形式一个完成数据开发流程,在流程中的每个关节都可以单独进行开发

select gender,avg(age) from tb1 join tb2 where dt = 2021-10-10 group by gender
​
​
​
1-数据的过滤
insert into tb1_where select * from tb1 where dt = 2021-10-10
insert into tb2_where select * from tb2 where dt = 2021-10-10
​
insert into tb1_where select * from tb1 where age > 20
insert into tb2_where select * from tb2 where name='张三'
​
2-关联表数据据
-- 新的表中保存了关联后的所有数据
insert into tb1_tb2_where select * from tb1_where join tb2_where 
​
​
3-数据分组计算
select gender,avg(age) from tb1_tb2_where group by gender
select city,avg(age) from tb1_tb2_where group by city

九、ETL和ELT

  • extract 数据抽取

  • transform 数据清洗转化

  • load 数据的导入

ETL 属于数据采集工作 通过采集工具采集的对应的数据内容,对内容清洗转化,在将清洗转化后的数据写入hdfs

ELT是将etl的开发流程进行了调整,使用采集工具采集数据,将数据直接写入hdfs,清洗转化过程可以使用hiveSQL在数仓中执行

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

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

相关文章

Edge的使用心得与深度探索:优化浏览体验的技巧与建议

随着互联网的快速发展,浏览器已经成为我们日常生活中不可或缺的工具之一。在众多浏览器中,微软Edge凭借其稳定性、安全性和功能丰富性备受用户青睐。本文将深入探讨Edge浏览器的各种功能与技巧,帮助用户优化其浏览体验。 文章目录 Edge翻译插…

iOS 全平台矢量动画库:体积小巧、功能丰富 | 开源日报 No.227

airbnb/lottie-ios Stars: 24k License: NOASSERTION lottie-ios 是一个用于在 iOS 平台上本地渲染 After Effects 矢量动画的库。 该项目主要功能、关键特性、核心优势包括: 跨平台支持:可在 iOS, macOS, tvOS, visionOS, Android 和 Web 上使用实时渲…

ASP.NET医院手麻信息系统源码 .NET6.0+VUE

目录 麻醉记录单 复苏记录单 麻醉文书 手术麻醉信息 1、 体征监控记录 2、 麻醉用药信息 3、 手术事件登记 4、 手术状态变更 5、 麻醉医师交接 6、 其他辅助操作 手麻信息系统是以服务围术期临床业务工作的开展为核心,通过与床边监护设备以及医院H…

OpenCV从入门到精通实战(五)——dnn加载深度学习模型

从指定路径读取图像文件、利用OpenCV进行图像处理,以及使用Caffe框架进行深度学习预测的过程。 下面是程序的主要步骤和对应的实现代码总结: 1. 导入必要的工具包和模型 程序开始先导入需要的库os、numpy、cv2,同时导入utils_paths模块&…

Objective-C网络数据捕获:使用MWFeedParser库下载Stack Overflow示例

概述 Objective-C开发中,网络数据捕获是一项常见而关键的任务,特别是在处理像RSS源这样的实时网络数据流时。MWFeedParser库作为一个优秀的解析工具,提供了简洁而强大的解决方案。本文将深入介绍如何利用MWFeedParser库,以高效、…

【学习笔记二十】EWM TU运输单元业务概述及后台配置

一、EWM TU运输单元业务流程概述 TU是指车辆和运输单元在货场中,移动车辆或运输单元。 车辆是特定运输方式的专用化工具,车辆可以包含一个或多个运输单元,并代表运输车辆的实际实体。 运输单元是用于运输货物的车辆的最小可装载单位,运输单元可以是车辆的固定部分。 …

高仿小米商城用户端

高仿小米商城用户端(分为商城前端(tongyimall-vue)和商城后端(tongyimall-api)两部分),是Vue SpringBoot的前后端分离项目,用户端包括首页门户、商品分类、首页轮播、商品展示、商品推荐、购物车、地址管理、下订单、扫码支付等功能模块。 …

AndroidStudio 导出aar包,并使用

打包 1、确认当前选项是否勾选,如未勾选请先勾选。 2、勾选完成后重启Android Studio。 3、重启完成后,选中要打包的module 4、打包完成 使用 1.在项目中新建libs,放入aar文件。 2.修改配置 添加如下代码 flatDir {dirs("libs")}3.修改app…

档案集中管理的痛点怎么解决?

档案集中管理可能面临的痛点包括以下几个方面: 1. 档案分类和整理困难:档案集中管理会面临大量档案的分类和整理工作,可能导致混乱和困难。 解决方法: - 建立统一的档案分类规范和流程,确保所有档案都能按照规定的方式…

PMP报考别跟风!搞懂这些问题不踩坑!

1.PMP是什么? 1.PMP(Project ManagementProfessional)的中文全称是项目管理专业人士资格认证。该认证是由美国项目管理协会PMI在全球206个国家发起的针对项目经理的资格认证。 2.PMP认证是目前国际上项目管理领域认可度和含金量最高的证书。通过PMP就证明你的项目…

性能测试--数据库慢 SQL 语句分析

一 慢 SQL 语句的几种常见诱因 1. 无索引或索引失效 ​ 当查询基于一个没有索引的列进行过滤、排序或连接时,数据库可能被迫进行全表扫描,即逐行检查所有数据,导致性能显著下降。 ​ 虽然我们很多时候建立了索引,但在一些特定的…

Java学习笔记零基础入门1

目录 第一章 Java概述 1.1 什么是程序 1.2 Java 技术体系平台 1.3 Java 重要特点 1.4 Java 的开发工具 4.1 工具选择 1.5 Java 运行机制及运行过程 5.1 Java 语言的特点:跨平台性 5.2 Java 核心机制-Java 虚拟机 [JVMjavavirtual machine] 1.6 什么是JDK&…

掌握Node Version Manager(nvm):跨平台Node.js版本管理

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

人工智能培训老师大模型老师叶梓:LoRA技术的应用与实践

在深度学习领域,大型语言模型(LLMs)的微调是一个重要的研究方向,旨在将预训练的模型调整到特定任务上。然而,由于模型参数众多,这一过程往往需要大量的计算资源和内存。幸运的是,一种名为低秩适…

男人的梦想:使用 Python Turtle 绘制豪华汽车 Logo

目录: 宝马汽车 Logo奔驰汽车 Logo奥迪汽车 Logo特斯拉汽车 Logo 以下代码中,将向你展示多个使用 Python Turtle 中绘制的豪华汽车 Logo,包括奔驰、宝马、奥迪、特斯拉的汽车 Logo。 宝马汽车 Logo import turtle as pen pen.setpos(0,-250) …

SpringBoot版本配置问题与端口占用

前言 ​ 今天在配置springboot项目时遇到了一些问题,jdk版本与springboot版本不一致,在使用idea的脚手架创建项目时,idea的下载地址是spring的官方网站,这导致所下载的版本都是比较高的,而我们使用最多的jdk版本是jdk…

【WebSocket连接异常】前端使用WebSocket子协议传递token时,Java后端的正确打开方式!!!

文章目录 1. 背景2. 代码实现和异常发现3. 解决异常3.1 从 URL入手3.2 从 WebSocket子协议的使用方式入手(真正原因) 4. 总结(仍然存在的问题) 前言: 本篇文章记录的是使用WebSocket进行双向通信时踩过的坑&#xff0c…

基础拓扑学习

基础拓扑 有限集、可数集和不可数集 2.1 定义 考虑两个集 A A A和 B B B,他们的元素可以是任何东西。假定对于 A A A的每个元素 x x x,按照某种方式,与集 B B B的一个元素联系着,这个元素记作 f ( x ) f\left( x \right) f(x);那…

python学习笔记B-07:序列结构之列表--列表的常用函数和方法

以xx_函数名(列表名)的形式出现的是函数;以xx_列表名.xx_方法名的形式出现的是方法。 列表常用函数如下: len():计算列表元素数量 max():获取列表元素最大值 min():获取列表元素最小值 sum():计算列表中各元素之和 列表常用方法如…

windows下安装kibana

下载:https://www.elastic.co/cn/downloads/kibana 安装:https://www.elastic.co/guide/cn/kibana/current/install.html 安装好后,cd到kibana的bin目录,启动kibana.bat 然后访问localhost:5601