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.hqwc.cn/news/630607.html

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

相关文章

云原生Kubernetes: K8S 1.29版本 部署Kuboard

目录 一、实验 1.环境 2.K8S 1.29版本 部署Kuboard (第一种方式) 3.K8S 1.29版本 部署Kuboard (第二种方式) 4.K8S 1.29版本 使用Kuboard 二、问题 1.docker如何在node节点间移动镜像 一、实验 1.环境 (1)主机 表1 主机 主机架构版本IP备注ma…

浅写个登录(无js文件)

全部代码如下&#xff0c;无需编写wxss文件&#xff0c;渲染都在style里面&#xff1a; <view style"height: 250rpx;width: 100%;"> <!-- 背景图片 --><view style"position: absolute; background-color: antiquewhite; height: 250rpx;width…

文件内容操作

文件内容操作 一:字节流1.1:InputStream1.1:构造方法:1.1.2:read()方法:1.1.3:关闭文件:close 1.2:OutputStream1.2.1:write() 二:字符流2.1:Reader2.2:Writer 一:字节流 字节流:以字节为单位读写数据. 常用的类主要有:InputStream,OutputStream 核心操作: (1)通过构造方法,打…

Tensorflow小技巧01:检测本地Tensorflow的版本

前言&#xff1a; 以Pycharm为例&#xff0c;Windwos10系统&#xff0c;检测本地环境的Tensorflow的版本&#xff1a; 1 打开Pycharm窗口 2 在窗口中输入&#xff1a; pythonPython 3.9.5 (tags/v3.9.5:0a7dcbd, May 3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win…

实测52.4MB/s!全志T3+FPGA的CSI通信案例分享!

CSI总线介绍与优势 CSI&#xff08;CMOS sensor parallel interfaces&#xff09;总线是一种用于连接图像传感器和处理器的并行通信接口&#xff0c;应用于工业自动化、能源电力、智慧医疗等领域&#xff0c;CSI总线接口示意图如下所示&#xff08;以全志科技T3处理器的CSI0为…

怎么设置启用远程桌面? 如何让外网电脑远程本地内网?

如何远程控制电脑&#xff1f;最简单实用的方案是开启电脑系统自带的远程桌面功能&#xff0c;如果涉及跨网、内外网互通&#xff0c;可以同时用快解析内网映射外网。下面是方案的具体实施步骤&#xff0c;供大家参考。 怎么打开设置启用远程桌面&#xff1f; 1.在目标需要远…

全球排名前十的搜索引擎,你猜百度排名在第几位?bing稳居二位!

通常情况下&#xff0c;营销人员在争夺其在线业务的流量时会非常关注Google&#xff0c;无论是通过他们的网站&#xff0c;博客文章还是其他形式的内容。考虑到谷歌无疑是最受欢迎的搜索引擎&#xff0c;拥有超过85%的搜索市场份额&#xff0c;这是有道理的。 但这种受欢迎程度…

【云计算】云计算八股与云开发核心技术(虚拟化、分布式、容器化)

【云计算】云计算八股与云开发核心技术&#xff08;虚拟化、分布式、容器化&#xff09; 文章目录 一、什么是云计算&#xff1f;1、云计算的架构&#xff08;基础设施&#xff0c;平台&#xff0c;软件&#xff09;2、云计算的发展 二、如何做云计算开发&#xff1f;云计算的核…

微信小程序实现美食检索功能

1、打开浏览器搜索&#xff1a;腾讯位置服务 2、注册一个账号&#xff0c;有账号的直接登陆就行 3、注册登陆成功后&#xff0c;点击控制台 4、进入控制台后点击我的应用——>创建应用 5、添加key,注意看注释 6、key添加成功后&#xff0c;开始分配额度&#xff08;配额&…

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

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

Hive进阶(4)----MapReduce的计算过程(赋图助君理解)

MapReduce的计算过程 MapReduce是一种编程模型和处理大规模数据集的方法。它通常用于分布式计算环境中&#xff0c;能够将数据处理任务分解成独立的部分&#xff0c;分配给多台计算机进行并行处理。这个模型由Google提出&#xff0c;并在开源领域中得到了广泛的应用和实现。Map…

风力发电自动化控制系统中的智能化技术应用研究

风力发电自动化控制系统中的智能化技术应用研究 随碳中和目标的提出和执行&#xff0c;风能发电作为新能源行业的核心部分&#xff0c;步入了它的黄金发展期。由于风能资源具有间歇性、随机性等特点&#xff0c;这给风电的高效利用带来了巨大挑战。为了增强风力发电系统的工作效…