大数据复习-hive

大数据复习笔试试题——涉及hadoop\zookeeper\HA\Hbase\Hive\Spark\scala 1. 简答题(每题10分,共50分)1.zookeeper底层提供两个主要功能是什么?zookeeper集群角色有哪些?功能:1.管理数据:存储和查询的功能 [利用HDFS实现存储,利用YARN实现查询2.数据节点监听服务集群角色:leader,follower  2.hadoop核心组件有哪些及主要作用?由A服务器免密码登陆(ssh)到B服务器,执行的命令分别什么?HDFS:分布式存储YARN:... 阅读详情

一、hive建表优化
分区表:将表中的数据按照指定的规则份文件夹管理。
分桶表:对hive表分桶可以将表中记录按分桶键(字段)的哈希值分散进多个文件中,这些小文件称为桶。桶以文件为单位管理数据。分区针对的是数据的存储路径,分桶针对的是数据文件。如果查询的维度是分桶字段,查询的时候先确定数据所在的桶,提升查询效率。
进行join的时候,关联字段就是分桶字段,只有相同的桶之间的数据进行关联,从而提升关联效率。
设置下set hive.enforce.bucketing=true
set mapreduce.job.reduces=-1;
注意:hive.enforce.bucketing为true时,reduce要设为-1;
hive.enforce.bucketing为false时,reduce要设为和分桶数一致
如果是用spark引擎,预估一下,单个桶的数据存储空间不要导致executor内存溢出就行,一般一个桶几百兆比较合理,因为插入分桶表的reducer个数和分桶个数是相等的
二、hive存储优化
hive支持的存储格式主要有textfile,sequencefile(行存储,适合select ),orc,parquet(列存储,适合count(),sum()等)。
压缩格式:deflate,gzio,bzip2,lzo,snappy
三、语法优化
1.列裁剪与分区裁剪
列裁剪就是查询时只读取需要的列,分区裁剪就是只读取需要的分区。
2.group by
默认情况下,map阶段同一key分发给一个reduce,当一个key数据过大时就倾斜了。
优化:
并不是所有的聚合操作都需要在reduce端完成,很多聚合操作都可以在map端进行部分聚合,最后在reduce端得出最终结果。
(1)开启map端聚合参数设置
set hive.map.aggr=true;
(2)在map端进行聚合操作的条目数目。
set hive.groupby.mapaggr.checkinterval=100000
(3)有数据倾斜的时候进行负载均衡(默认是false)
set hive.groupby.skewindata=true
当选项为true时,生成的查询计划会有两个mr job
第一个mr job 中,map的输出结果会随机分布到reduce中,每个reduce做部分聚合操作,并输出结果,这样处理的结果是相同的group by key 有可能被分发到不同的reduce中,从而达到负载均衡的目的。
第二个mr job再根据预处理的数据结果按照group by key 分布到reduce中(这个过程可以保证相同的group by key 被分布到同一个reduce中),最终完成最终的聚合操作(虽然可以解决数据倾斜,但是不能让运行速度更快)
(4)矢量计算技术
vectorization技术以设置批处理的增量大小为1024行单词来达到比单条记录单词获得更高的效率
set hive.vectorized.execution.enabled = true;
(5)多重模式
from student
insert int t_ptn partition(city=a) select id,name,sex,age where city = a
insert int t_ptn partition(city=a) select id,name,sex,age where city = b
(6)in/exists语句
select a.id,a.name from a where a.id in (select b.id from b)
select a.id,a.name from a where exists(select id from b where a.id=b.id)
利用left semi join 优化
select a.id,a.name from a left semi join b on a.id = b.id
(7)cbo优化
(8)谓词下推
先执行where
set hive.optimize.ppd =true
(9)mapjoin
map join是将join双方比较小的表直接分发到各个map进程的内存中,在map进程中进行join 操作,这样就不用进行reduce操作,从而提高了速度。如果不指定mapjoin或者不符合mapjoin的条件,那么hive解析器会将join操作转换成common join,即在reduce阶段完成join,容易发生数据倾斜。可以用mapjoin把小表全部加载到内存,在map端进行join,避免reducer处理。
set hive.auto.convert.join = true
set hive.mapjoin.snakktable.filesize =2500000
(10)smb join大表join大表
set hive.optimize.bucketmapjoin=true
set hive.optimize.buckmapjoin.sortedmerge=true
set hive.input.format=org.apache.hadoop.hive.ql.io.bucketizehiveinputformat;
(11)笛卡尔积
join 不加on条件,或者on条件无效会产生笛卡尔积,严格模式可以避免
四、数据倾斜
巨大多数任务很快完成,只有一个或者少数几个任务执行的很慢甚至最终执行失败,这样的现象称为数据倾斜。导致数据倾斜的原因在于按照key分组以后,少量的任务负责绝大部分数据的计算,也就是说产生数据倾斜的hql中一定存在分组操作,那么从HQL的角度,我们可以把数据倾斜分为单表携带了groupby字段的查询和两表或者多表join的查询。
(1)单表数据倾斜使用参数
当任务中存在group by操作同时聚合函数为count或者sum可以设置参数来处理数据倾斜问题。

    ①开启map端聚合参数设置
    set hive.map.aggr=true;
    ②在map端进行聚合操作的条目数目。
    set hive.groupby.mapaggr.checkinterval=100000
    ③有数据倾斜的时候进行负载均衡(默认是false)
    set hive.groupby.skewindata=true
    当选项为true时,生成的查询计划会有两个mr job

调整reduce个数方法一
set hive.exec.reducers.bytes.per.reducer=256000000
set hive.exec.reducers.max = 1009
N=min(参数2,总输入数据量/参数1)(参数2 指的是上面的1009,参数1值得是256M)
调整reduce个数方法二
set mapreduce.jon.reduces=15
(2)多表产生数据倾斜
在编写join查询语句时,如果确定是由于join出现的数据倾斜

# join的键对应的记录条数超过这个值会进行分拆,根据具体数据设置
 set hive.skewjoin.key=100000
 #如果是join过程中出现倾斜应该设置为true
 set hive.optimize.skewjoin=false

如果开启了,在join过程中hive会将计数超过阈值hive,skewjoin.key(默认100000)的倾斜key对应的行临时写进文件中,然后再启动另一个job做map join生成结果。通过hive.skewjoin.mapjoin.map.tasks参数还可以控制第二个job的mapper数量,默认10000

set hive.skewjoin.mapjoin.map.tasks=10000

如果是大表join小表,用mapjoin

五、hive job优化
hive map优化
(1)复杂文件增加map数
当input的文件都很大,任务逻辑复杂,map执行非常慢的时候,可以考虑增加map数,来使得每个map处理的数据量减少,从而提高任务的执行效率。
computeslitesize(math.max(minsize,math.min(maxsize,blocksize)))=blocksize=128m公式,调整maxsize最大值。让maxsize最大值低于blocksize就可以增加map的个数。
set mapreduce.input.fileinputformat.split.maxsize=100
(2)小文件合并
①在map执行前合并小文件,减少map数。combinehiveinputformat具有对小文件进行合并的功能(系统默认的格式)。hiveinputformat没有对小文件合并功能。
②在map-reduce的任务结束时合并小文件的设置:
在map-only任务结束时合并小文件,默认true
set hive.merge.mapfiles=true
在map-reduce任务结束时合并小文件,默认false
set hive.merge。mapredfiles =true
合并文件的大小,默认256M
set hive.merge.size.per.task =268435456
当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge
set hive.merge.smallfiles.avgsize=16777216
(3)map端聚合
set hive.map.aggr=true,相当于map端执行combiner
(4)推测执行
set mapred.map.tasks.speculative.execution=true
hive reduce优化
(1)合理设置reduce数
reduce数并不是越多越好,过多的启动和初始化reduce也会消耗时间和资源,另外有多少个reduce就会有多少个输出文件,如果生成了很多个小文件,纳闷如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题
在设置reduce个数的时候也需要考虑这两个原则,处理大数据量利用合适的reduce数,使得单个reduce任务处理数据量大小要合适。
(2)推测执行
hive整体优化
(1)fetch抓取
fetch是指HIVE中对某些情况的查询可以不必使用mapreduce计算,例如select * from emp ,在这种情况下,hive可以简单的读取emp对应的存储目录下的文件,然后输出查询结果到控制台。比如全局查找,字段查找,limit查找等。
(2)本地模式大多数的hadoop job 是需要hadoop提供完整的可拓展性来处理大数据集的。不过,有时hive的输入数据量是非常小。在这种情况下,为查询触发执行任务消耗的时间可能会比实际job的执行之间要多得多。对于大多数这种情况,hive可以通过本地模式在单台机器上处理所有的任务,对于小数据集,执行时间可以被明显的缩短。
(3)并行执行
数据量大,sql长的时候使用。默认情况下,HIVE一次只会执行一个阶段,不过,某个特定的job可能包含众多的阶段,而这些阶段可能并非完全互相依赖,也就是说有些阶段是可以并行执行的,这样可能使得整个job的执行时间缩短。不过,如果有更多的阶段可以并行执行,那么job可能就越快完成。
(4)严格模式
①分区表不使用分区过滤
除非where语句中含有分区字段来过滤条件来限制范围,否则不允许执行。不允许用户扫描所有分区。
②使用order by 没有limit过滤
使用order by,必须使用limit语句
③限制笛卡尔积
④jvm重用
小文件过多的时候使用

大数据技术之_08_Hive学习_复习与总结 阅读详情

相关推荐

Hive学习之Hive配置管理

Hive是基于Hadoop的一种数据仓库,对查询和管理分布式存储中的超大数据集提供了很大帮助。正如绝大部分开源软件一样,Hive允许用户调整参数改变Hive的默认行为。用户可以使用下面三种方法中的任意一种对Hive进行配置管理: 1.       在Hive的CLI(命令行接口)使用set命令在会话层级为后续语句设置参数值,比如:set hive.exec.scratchdir=/tmp/myd

skyWalker_ONLY 7452

大数据---29.Hive 自定义函数

Hive 自定义函数(临时函数和永久函数)

u014579001的博客 4561

hive-exec-2.1.1.jar

hive2.1.1 show create table 表名,hive中文乱码,替换hive-exec-2.1.1.jar

Hadoop和hive-exec-3.1.2的Guava的版本冲突导致Flink任务启动异常

一、背景 1、出现异常 公司准备从CDH迁回社区版Hadoop集群,直接把Hadoop升级为比较新的3.30版本,Hive升级为3.12版本。Flink编译的是1.12.0版本,启动自己的测试直接报出下面的错,甚至启动官方的demo任务也会报相同的错。 Caused by: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument (ZLjava/lang/String;Ljava/lang/Object;

weixin_44500374的博客 4360

银河麒麟V10离线升级OpenSSH实战:从编译到回滚全流程

OpenSSH作为Linux系统远程登录的核心组件,其版本升级直接关系到系统安全与等保合规。在信创环境下,银河麒麟V10自带的OpenSSH版本往往无法满足漏洞扫描与安全加固要求,而离线编译升级涉及依赖处理、编译参数、服务替换与回滚方案等多个技术环节。本文围绕银河麒麟V10(x86_64)平台,详细讲解OpenSSH离线升级的完整实操流程,包括环境摸底、依赖包安装、源码编译、配置文件兼容性处理、服务重启验证以及常见问题排查,并分享批量升级与安全加固的工程经验,帮助运维人员在不断网、不重装的前提下一次成功完成

weixin_30582943的博客 390

ESP32实战指南:SPI驱动ADXL345三轴加速度传感器的精准数据采集与姿态解算

本文详细介绍了如何使用ESP32通过SPI接口驱动ADXL345三轴加速度传感器,实现精准数据采集与姿态解算。从硬件连接到SPI通信优化,再到数据处理和低功耗策略,提供了全面的实战指南。特别适合物联网开发者和硬件工程师参考,帮助快速掌握传感器数据采集技术。

vim8coder的博客 1042

大数据期末复习——hadoop、hive等基础知识

Hadoop提供了高可用性的解决方案,如HDFS的NameNode HA(高可用性)机制和VARN的ResourceManager HA机制,确保即使在节点故障的情况下,集群仍能保持高可用性,不影响作业的执行。2)Flume:Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据。:Hadoop集群提供了丰富的监控和日志记录功能,可以实时监校集群的状态和性能指标,及时发现问题并进行处理,提高集群的稳定性和可靠性,

qq_64000756的博客 1890

全面分析总结解决Could not transfer artifact org.apache.maven.plugins等此类问题的方法

全面分析总结解决Could not transfer artifact org.apache.maven.plugins,Could not transfer artifact xxx from/to xxx等此类问题的方法

ccjjjjdff的博客 1万+

大数据框架复习-hive

大数据框架复习之hive

Tongya1998的博客 397

深入解析逆时偏移(RTM)算法及其在C++中的实现

逆时偏移(Reverse Time Migration, RTM)是一种高级地震成像技术,广泛应用于地震勘探中。RTM通过逆时传播波场来构建地震子波,能够提供更高分辨率和更精确的地下构造图像。本文将详细介绍RTM的基本原理,并通过C++代码示例,深入解析如何实现和优化RTM算法。希望这篇文章能够为地球物理学家和C++开发者提供有价值的参考。

qq_38334677的博客 1530

使用再生龙备份还原liunx系统(精确每一步)

再生龙镜像可自行到官网下载(ISO/ZIP格式均可),然后使用tuxboot烧录工具制作启动盘,另外准备一个U盘用来存储备份的镜像文件,即再生龙盘和存储盘是两个分开的。当然也可以用分区工具把同一个硬盘分区来使用,比较方便,先学会基本的吧,只是告诉有个捷径,省个U盘。

米可的博客! 8382

复习打卡大数据篇——HIVE 03

在order by出现的情况下,不管用户设置几个reducetask,在编译执行期间都会变为一个。第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。只返回两个表中都存在的记录。返回两个表的笛卡尔积,即左表的每一行与右表的每一行组合,结果集的行数等于左表的行数乘以右表的行数。则会保留所有行,包括重复的行。返回左表中的所有行,以及右表中满足连接条件的匹配行。会返回左边表的记录,前提是其记录对于右边的表满足ON语句中的判定条件。返回两个表中的所有行,如果某一行在其中一个表中没有匹配,则返回。

2402_85573962的博客 1246

【读代码】从claude skills到superpowers项目

最近claude skills成了大热门,今天一起看下GitHub 上的开源技能框架,他将“工作流”封装为“技能” (Skills)。本文尝试剖析该项目的技能粒度定义、多技能关联架构、应用逻辑等。与传统的 Function Calling 不同,Superpowers 中的 Skill 定义粒度并非“原子操作”,而是**“认知模式” (Cognitive Mode) 或“工作阶段”**。

kakaZhui的博客 1924

大数据复习笔记——hive

这次主要讲解一下平常使用较多的数据仓库hive和面向列的开源数据库hbase 一、Hive 1、Hive的介绍 hive提供了HiveQL方言来查询存储在hadoop集群中的数据。hive可以将大多数的查询转换为MapReduce作业。 hive最适合于数据仓库,使用数据仓库进行相关的静态数据分析,而不需要快速响应给出结果,而且数据本身不会频繁变化。 数据仓库 数据仓库是信息(对其进行分析可做出更...

Y_BigFFFFFF的博客 700

【YOLO目标检测全栈实战】68 模型量化:从FP32到INT8,精度不掉,速度翻倍

摘要: 模型量化能显著提升推理速度(如YOLOv5s帧率从15FPS提升至38FPS),但需避免三大误区:1)校准集需覆盖实际场景,而非随机采样;2)敏感层(如检测头)应保留FP32精度;3)预处理必须与量化前后一致。通过混合精度量化(Backbone用INT8,检测头用FP32)和逐通道量化,可实现<1%的mAP损失。关键步骤包括校准数据准备、量化感知训练及逐层精度评估,最终在Jetson Nano等边缘设备上实现速度与精度的平衡。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 148

手把手入门YOLO到改进优化教程专栏介绍与说明——列表目录查阅(持续更新)

手把手入门YOLO到改进优化教程专栏介绍与说明——列表目录查阅(持续更新)

嵌入式阿齐Archie 2万+

复习打卡大数据篇——HIVE 01

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。本质是将SQL转换为MapReduce程序。主要用来做离线数据分析。

2402_85573962的博客 1302

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大数据开发复习Hive篇

文章目录Hive4.1、hive的介绍4.2、hive的架构4.3、Hive 数据模型4.4、常用操作4.4.1、数据库相关4.4.2、内部表外部表4.4.3、创建分区表4.4.4、增删分区4.4.5、hive中的join4.4.6、json解析4.5、常用函数4.5.1、数值函数4.5.2、日期函数4.5.3、条件函数4.5.4、字符串函数4.5.5、类型转换4.6、hive常用的优化4.6.1、 Fetch抓取(Hive可以避免进行MapReduce)4.6.2、本地模式4.6.3、分区表分桶表4.6.

落幕7的博客 325

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

hive 修改字段类型_大数据复习之 Hive

Hive 基本概念:什么是Hive:Hive:由 Facebook 开源用于解决海量结构化日志的数据统计。Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能。本质是:将 HQL 转化成 MapReduce 程序。1)Hive 处理的数据存储在 HDFS2)Hive 分析数据底层的实现是 MapReduce3)执行程序运行在 Yarn ...

weixin_39875192的博客 982

复习打卡大数据篇——HIVE 02

在Hive的建表语句中,和SerDe相关的语法为ROW FORMAT DELIMITED | SERDE....这一行,ROW FORMAT DELIMITED 表示使用LazySimpleSerDe类进行序列化解析数据,ROW FORMAT SERDE 表示使用其他SerDe类进行序列化解析数据。这样,在查询时只需扫描特定月份的数据,而不必扫描全年的数据,从而减少查询时间。也就是序列化和反序列化。:通过分区,Hive能够避免全表扫描,提升查询性能,尤其是在处理大规模数据时,分区是一种非常有效的优化手段。

2402_85573962的博客 1001

大数据复习笔记之Hive的架构

参考链接;: https://www.cnblogs.com/qingyunzong/p/8707885.html Hive的架构 从上图看出hive的内部架构由四部分组成: 1、用户接口: shell/CLI, jdbc/odbc, webui Command Line Interface   CLI,Shell 终端命令行(Command Line Interface),采用交互形式使用 H...

席八 435

大数据存储与访问Hive复习

日期的转换(substring、date_format、regexp_replace)开窗函数 先分区在降序 是让用RANK()函数还是ROW_NUMBER()函数来排序。ASC(ascend): 升序(默认) DESC(descend): 降序。输出对emp表中sal的2倍,sal除以5,sal对3取余的计算结果。展示全部的分区 展示一个特定的分区 怎么用where语句。数据库的删除 怎么删除空的数据库 怎么删除非空的数据库。location '存储路径';聚合函数 sum min。

So1ok5的博客 927

【大数据 复习】第9章 数据仓库分析工具Hive

(3)元数据存储模块(Metastore):是一个独立的关系型数据库,通常是与MySQL数据库连接后创建的一个MySQL实例,也可以是Hive自带的derby数据库实例。传统的数据库提供分区功能来改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率。Hive不支持分区功能,不使用分区使用索引可以加快数据的查询速度。(4)HBase 提供数据的实时访问,而Hive只能处理静态数据,主要是BI报表数据,所以HBase与Hive的功能是互补的。3.判断题 (1分)4.判断题 (1分)

永烨的博客 1749

大数据复习复习(hadoo+hive+mongodb+hbase)

1.传统的关系型数据库的B树,更新少量数据效率高,mapReduce更新大量数据效率高 2.关系型数据库与MapReduce比较 MapReduce比较适合以批处理方式处理需要分析整个数据集的问题,尤其是动态分析。 RDBMS适合于点查询和更新,数据集被索引之后,数据库系统能提供低延迟的数据检索和快速的少量数据更新。 MapReduce适合一次写入,多次读取的数据的应用,关系型数据库更适合持续更新...

qq_30693057的博客 784
上一篇: 大数据复习-生产调优
下一篇: 大数据复习--spark
普通网友
博客等级 码龄6年 137粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值