HIVE介绍(五)_hive limit

ops/2025/2/1 11:35:00/

注意:

1.Hive处理的数据存储在HDFS上
2.hive分析数据的底层处理逻辑是MapReduce
3.执行运行在Yarn上执行

Hive运行原理

在这里插入图片描述
在这里插入图片描述

Hive为什么要分区(partitioned by)?

随着系统运行时间越来越长,表的数据量不断增大,通过hive查询通常是"全表扫描"这样就会出现数据量过大,全表扫描时间过长,会造成查询效率更加低下

Hive中分区就是分目录 ,把一个大的数据集根据业务需求分隔成小的数据集,在查询的时候where子句中的表达式选择需要查询的分区,这样就可以提高效率

通过对表进行分区,避免hive进行全表扫描,这样可以提高查询效率

hive的分区对应HDFS文件系统上独立的文件夹,该文件夹下是该分区所有的数据文件
其实Hive中分区就是分目录 ,把一个大的数据集根据业务需求分隔成小的数据集,在查询的时候where子句中的表达式选择需要查询的分区,这样就可以提高效率

Hive与mysql的对比

数据存储位置:Hive的数据都存储在HDFS上,数据库是保存在设备或本地文件系统中
搜索引擎:Hive 搜索引擎是MR,数据库通常有自己的搜索引擎
执行延迟:Hive没有索引,需要全表扫描,因此延迟高。数据库小数据处理延迟较低,但处理大数据能力不如hive
扩展性:Hive基于hadoop扩展性高,数据库由于ACID语义限制,扩展非常有限,即使Oracle也只有100台左右

Hive内部表和外部表

1.内部表(管理表):当删除一个内部表时,hive也会删除这个表中的数据。内部表不适合和其他工具共享数据
2.外部表:删除该表并不会删除掉原始数据,删除的是表的元数据

hive_62">hive数据类型

hive数据类型分两种基础数据类型和复杂数据类型
基础数据类型包括

基础数据类型长度
TINYINT1byte有符号整数
SMALINT2byte有符号整数
INT3byte有符号整数
BIGINT4byte有符号整数
BOOLEAN布尔类型,true或false
FLOAT单精度浮点
DOUBLE双精度浮点
STRING字符序列
TIMESTAMP整数,浮点数或者字符串
BINARY字节数组

复杂数据类型

复杂数据类型字面语法示例
STRUCTStruct(‘John’,’Doe’)
MAPMap(‘first’,’JOIN’,’last’,’Doe’)
ARRAYArray(‘John’,’Doe’)
hive_97">hive数据存格式

textfile 普通的文本文件存储,不会压缩
sequencefile 二进制存储格式,本身即是压缩格式,不能使用load进行数据加载
orcfile 行列混合存储,hive在该格式下,会尽量将附近的列和行的块存在一起,仍然是压缩格式,查询效率比较高

自定义函数UDF和UDTF

UDF通常是一个输入对应一个输出,应用场景有:根据身份证号判断该用户年龄自定义UDF需要继承UDF并重写evaluate方法

UDTF为一个输入多个输出,应用场景有:根据登录的信息拆分成多个字段输出继承GenericUDTF,重写实现initialize(定义输出参数的名字和类型), process, close三个方法,用来解析事件字段

自定义函数相比json解析:自定义函数方便定位错误
在这里插入图片描述

造成数据倾斜的情况:

1)、key分布不均匀
2)、业务数据本身的特性
3)、建表时考虑不周
4)、某些SQL语句本身就有数据倾斜

join语句造成、count(distinct col)造成、group by造成数据倾斜
解决方案:
1.分区、分桶也是hive优化的一种
2.group by操作是否允许数据倾斜,默认是false,当设置为true时,执行计划会生成两个map/reduce作业,第一个MR中会将map的结果随机分布到reduce中,达到负载均衡的目的来解决数据倾斜。(建议开启)
hive.groupby.skewindata=false/true
3.开启数据倾斜的join优化,hive.optimize.skewjoin=false/true默认不开启false(建议开启)
特殊情况特殊处理:
在业务逻辑优化效果的不大情况下,有些时候是可以将倾斜的数据单独拿出来处理。最后union回去
在这里插入图片描述

Hive的优化
  1. 设置Map端join:

如果不指定Mapjoin或者不符合Mapjoin的条件,Hive解析器会将Join操作转换成Common Join,即:在Reduce阶段完成join,容易发生数据倾斜。可以用Mapjoin把小表全部加载到内存在map端进行join,避免reducer处理。

  1. 行列过滤

列处理:尽量使用分区过滤器,少用select * ,“ * ”代表所有字段,底层处理会将所有字段在内存罗列出来,会占用大量的计算资源
行处理:在分区裁剪中,当使用外连接时,如果将副标的过滤条件写在where后面,就会先进行全表关联再过滤,正确的写法时写在on后面,或者直接写成子查询。

  1. 采用分区、分桶

分区的目的是避免进行全表扫描,当分区中数据量依然很大,每次查询都会在当前区中进行全表查询也会很慢,这时需要进行分桶操作来提高查询效率

  1. 自动或手动决定mapTask的大小(可以有效的减少mapTask的个数)和reduce的个数

MapTask默认大小为128M,MapTask的个数并不是越多越好,maptask是会消耗内存资源的,如果maptask过多启动和初始化的时间会超过逻辑计算的时间

  1. 设置每个reduce任务处理数据的量,(默认为一个Reduce)以及reduce的数量
  2. 小文件合并:

在map执行前合并小文件,减少Map数:CombineHiveInputFormat具有小文加合并功能,HiveInputFormat没有对小文件的合并功能
7. jvm重用

(缺点:设置开启之后,task插槽会一直占用资源,不论是否有task运行,直到所有的task即整个job全部执行完成时,才会释放所有的task插槽资源)

  1. hive-site.xml的配置文件中设置
left join、right join和join的区别

在这里插入图片描述

有收获?希望烙铁们来个三连击,让更多的同学看到这篇文章

1、烙铁们,关注我看完保证有所收获,不信你打我。

2、点个赞呗,可以让更多的人看到这篇文章,后续还会有很哇塞的产出。

本文章仅供学习及个人复习使用,如需转载请标明转载出处,如有错漏欢迎指出
务必注明来源(注明: 来源:csdn , 作者:-马什么梅-)


http://www.ppmy.cn/ops/154729.html

相关文章

Linux 多路转接select

Linux 多路转接select 1. select select() 是一种较老的多路转接IO接口,它有一定的缺陷导致它不是实现多路转接IO的最优选择,但 poll() 和 epoll() 都是较新版的Linux系统提供的,一些小型嵌入式设备的存储很小,只能使用老版本的…

【Flask】在Flask应用中使用Flask-Limiter进行简单CC攻击防御

前提条件 已经有一个Flask应用。已经安装了Flask和redis服务。 步骤1:安装Redis和Flask-Limiter 首先,需要安装redis和Flask-Limiter库。推荐在生产环境中使用Redis存储限流信息。 pip install redis Flask-Limiter Flask-Limiter会通过redis存储限…

2025年01月31日Github流行趋势

项目名称:Qwen2.5项目地址url:https://github.com/QwenLM/Qwen2.5项目语言:Shell历史star数:13199今日star数:459项目维护者:jklj077, JustinLin610, bug-orz, huybery, JianxinMa项目简介:Qwen…

DeepSeek模型:开启人工智能的新篇章

DeepSeek模型:开启人工智能的新篇章 在当今快速发展的技术浪潮中,人工智能(AI)已经成为了推动社会进步和创新的核心力量之一。而DeepSeek模型,作为AI领域的一颗璀璨明珠,正以其强大的功能和灵活的用法&…

前端八股CSS:盒模型、CSS权重、+与~选择器、z-index、水平垂直居中、左侧固定,右侧自适应、三栏均分布局

一、盒模型 题目:简述CSS的盒模型 答:盒模型有两种类型,可以通过box-sizing设置 1.标准盒模型(content-box):默认值,宽度和高度只包含内容区域,不包含内边距、边框和外边距。 2.边框盒模型&a…

C++初阶 -- 初识STL和string类详细使用接口的教程(万字大章)

目录 一、STL 1.1 什么是STL 1.2 STL的版本 1.3 STL的六大组件 二、string类 2.1 string类的基本介绍 2.2 string类的默认成员函数 2.2.1 构造函数 2.2.2 析构函数 2.2.3 赋值运算符重载 2.3 string类对象的容量操作 2.3.1 size和length 2.3.2 capacity 2.3.3 r…

实验二 数据库的附加/分离、导入/导出与备份/还原

实验二 数据库的附加/分离、导入/导出与备份/还原 一、实验目的 1、理解备份的基本概念,掌握各种备份数据库的方法。 2、掌握如何从备份中还原数据库。 3、掌握数据库中各种数据的导入/导出。 4、掌握数据库的附加与分离,理解数据库的附加与分离的作用。…

MapReduce简单应用(一)——WordCount

目录 1. 执行过程1.1 分割1.2 Map1.3 Combine1.4 Reduce 2. 代码和结果2.1 pom.xml中依赖配置2.2 工具类util2.3 WordCount2.4 结果 参考 1. 执行过程 假设WordCount的两个输入文本text1.txt和text2.txt如下。 Hello World Bye WorldHello Hadoop Bye Hadoop1.1 分割 将每个文…