hive的学习_优化

Hive join优化(mapjoin,streamtable) 一、 Join语法Hive支持的join语法:join_table: table_reference [INNER] JOIN table_factor [join_condition] | table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition | table_reference L 阅读详情

一.表连接:
1.将大表放后头
Hive假定查询中最后的一个表是大表。它会将其它表缓存起来,然后扫描最后那个表。
因此通常需要将小表放前面,或者标记哪张表是大表:/*streamtable(table_name) */。否则会引起磁盘和内存的大量消耗。
2. 使用相同的连接键
当对3个或者更多个表进行join连接时,如果每个on子句都使用相同的连接键的话,那么只会产生一个MapReduce job。
3. 尽量尽早地过滤数据
减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段。
4. 尽量原子化操作
尽量避免一个SQL包含复杂逻辑,可以使用中间表来完成复杂的逻辑
5.大大表关联:
把空值的key变成一个字符串加上随机数,把倾斜的数据分到不同的reduce上,由于null值关联不上,处理后并不会影响最终结果。


二.用insert into替换union all
如果union all的部分个数大于2,或者每个union部分数据量大,应该拆成多个insert into 语句,实际测试过程中,执行时间能提升50%


三.order by & sort by 
order by : 对查询结果进行全局排序,消耗时间长。需要 set hive.mapred.mode=nostrict
sort by : 局部排序,并非全局有序,提高效率。


五. limit 语句快速出结果
一般情况下,Limit语句还是需要执行整个查询语句,然后再返回部分结果。
有一个配置属性可以开启,避免这种情况---对数据源进行抽样
hive.limit.optimize.enable=true --- 开启对数据源进行采样的功能
hive.limit.row.max.size --- 设置最小的采样容量
hive.limit.optimize.limit.file --- 设置最大的采样样本数
缺点:有可能部分数据永远不会被处理到


六. 并行执行
hive会将一个查询转化为一个或多个阶段,包括:MapReduce阶段、抽样阶段、合并阶段、limit阶段等。
默认情况下,一次只执行一个阶段。 不过,如果某些阶段不是互相依赖,是可以并行执行的。
set hive.exec.parallel=true,可以开启并发执行。
set hive.exec.parallel.thread.number=16; //同一个sql允许最大并行度,默认为8。
会比较耗系统资源。


七. 调整mapper和reducer的个数
1.减少map数
若有大量小文件(小于128M),会产生多个map,处理方法是:
set mapred.max.split.size=100000000;    -- 决定每个map处理的最大的文件大小,单位为B
set mapred.min.split.size.per.node=100000000;  -- 节点中可以处理的最小的文件大小
set mapred.min.split.size.per.rack=100000000;-- 机架中可以处理的最小的文件大小
mapred.max.split.size <= mapred.min.split.size.per.node <= mapred.min.split.size.per.rack 
大于文件块大小128m的,按照128m来分隔,
小于128m,大于100m的,按照100m来分隔,
把那些小于100m的(包括小文件和分隔大文件剩下的)进行合并
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; -- 执行前进行小文件合并
2.增加map数
当input的文件都很大,任务逻辑复杂,map执行非常慢的时候,
可以考虑增加Map数,来使得每个map处理的数据量减少,从而提高任务的执行效率。
set mapred.map.tasks=?
set hive.map.aggr = true     map端的聚合
使大数据量利用合适的map数;使单个map任务处理合适的数据量。
3 Reduce阶段优化
调整方式:
-- set mapred.reduce.tasks=?   (更优先)
-- set hive.exec.reducers.bytes.per.reducer = ?-- 每个reduce处理的数据量,默认256MB
一般根据输入文件的总大小,用它的estimation函数来自动计算reduce的个数:reduce个数 = InputFileSize / bytes per reducer
4.一个reduce的情况
对于一个没有group by,而你有做了count这种聚合类的函数的时候它最后跑出的reduce的个数肯定是一个redeuce。
笛卡儿积:join的时候如果你要对两个表聚合的时候,如果是不用这种带on的情况下它最后也会一个reduce来运行。
使大数据量利用合适的reduce数;使单个reduce任务处理合适的数据量;


八.map join 
set hive.auto.convert.join = true; # 默认为false  
该参数为true时,Hive自动对左边的表统计量,如果是小表就加入内存,即对 小表使用Map join
/*+STREAMTABLE(a)+*/  指明哪张表是大表。对其它小表放入内存中。
/*+MAPJOIN(b)+*/  指明小表,并且放入内存中


九.Automatic merge:
hive.merge.mapfiles = true 是否合并map输出文件,默认为true
hive.merge.mapredfiles = false 是否合并Reduce 输出文件 默认为false
hive.merge.size.per.task = 256*1000*1000 合并文件的大小


十.并行:
set hive.exec.parallel=true设置为true。
要把那些没有相互依赖之间的关系的一些节点就可以能够尽可能的并行。


十一.严格模式
set hive.marped.mode=strict ------ 防止用户执行那些可能意想不到的不好的影响的查询
-- 分区表,必须选定分区范围
-- 对于使用order by的查询,要求必须使用limit语句。因为order by为了执行排序过程会将所有的结果数据分发到同一个reducer中进行处理。
-- 限制笛卡尔积查询:两张表join时必须有on语句

十一.数据倾斜
对sum,count来说,不存在数据倾斜问题。
原因
1)、key分布不均匀
2)、业务数据本身的特性
3)、建表时考虑不周
4)、某些SQL语句本身就有数据倾斜
关键词 情形后果
join 其中一个表较小,但是key集中分发到某一个或几个Reduce上的数据远高于平均值
join 大表与大表,但是分桶的判断字段0值或空值过多这些空值都由一个reduce处理,灰常慢
group by group by 维度过小,某值的数量过多 处理某值的reduce灰常耗时
count distinct某特殊值过多 处理此特殊值reduce耗时

解决方案:
1)参数调节:
hive.map.aggr=true map端部分聚合,当于 combiner
hive.groupby.skewindta = true  万能的方法  有数据倾斜时负载均衡  <--  一个job转换为2个job
2)sql语句调节
如何join:关于驱动表的选取,应选分布均匀的作为驱动表;做好列剪裁与 filter 操作,
达到两表 join 时,数量变小的效果。
大小表join:使用map join,让小表先进内存,在 map 端完成reduce 。
大表 join 大表:把空值null的key变成字符串加上随机数,倾斜数据分到不同 reduce 上。
groupby 维度过小:采用sum() group by 代替count (distinct) 完成计算。
不同数据类型关联的数据倾斜:把数值类型转化为 string。
eg. select *from a left join b on (a.id = cast(b.id as string))
3)小表加到内存中。
大大表关联:
userid 为空或者为0的情况:
把这个key变成一个字符串,并且加一个随机数,然后把倾斜的数据能够尽可能的分散开来,分散到不同的桶里面去

WSL子系统启动报错 Wsl/Service/CreateInstance/CreateVm/HCS_E_SERVICE_NOT_AVAILABLE WSL子系统启动报错 :Wsl/Service/CreateInstance/CreateVm/HCS_E_SERVICE_NOT_AVAILABLE 于是分析原因,最终发现是Windows功能中的虚拟机平台功能不知道什么时候被取消了。 阅读详情

相关推荐

深入解析CRC-16校验算法及其Verilog硬件实现

本文深入解析了CRC-16校验算法的原理及其在Verilog中的硬件实现方法。从基础的模2除法到串行和并行实现方案,详细介绍了LFSR结构、状态转移分析以及工业应用中的优化技巧。通过实际案例和性能对比,帮助开发者理解如何选择适合的CRC实现方案,确保数据传输的可靠性。

yolo5detector的博客 322

hive理解streamtable使用

今天看别人的博客,发现streamtable这个东西,作者描述是: 将大表放在JION的右边,这是就需要指定使用/*+ STREAMTABLE(..) */: hive> SELECT /*+ STREAMTABLE(b) */ a.val, b.val, c.val FROM a JOIN b > ON (a.key = b.key1) JOIN c将大表放在JION的右边

道听途说 6705

Databricks Genie:语义编译器架构与企业级智能解析实践

语义层是现代数据平台实现自然语言查询的核心基础,其本质是将业务术语映射为可执行、可治理的数据契约。原理上依赖结构化元数据、值字典与数据血缘三支柱协同,通过分层AI代理(如Intent Parsing、Retriever、Verifier)实现意图识别→语义对齐→安全执行的闭环。技术价值在于降低SQL使用门槛的同时保障审计性、一致性和权限可控性,适用于销售运营、财务分析等一线业务场景。本文深入解析Databricks Genie作为典型语义编译器的落地逻辑,涵盖Unity Catalog知识注入、七层Agen

weixin_29053695的博客 337

Hive优化的十大方法

Hive用的好,才能从数据中挖掘出更多的信息来。用过hive的朋友,我想或多或少都有类似的经历:一天下来,没跑几次hive,就到下班时间了。Hive在极大数据或者数据不平衡等情况下,表现往往一般,因此也出现了presto、spark-sql等替代品。这里重点讲解hive的优化方式,例如 优化分组:set hive.auto.convert.join=true; 优化表关联内存运行:/* MAPJ...

微信搜:import_bigdata,大数据领域硬核原创作者 4056

squidpy 教程 2:利用 Scanpy 和 Squidpy 进行空间数据的可视化分析

本教程详细介绍了如何利用Squidpy和Scanpy对空间转录组数据进行可视化分析。通过将Scanpy处理得到的聚类结果映射回原始组织图像,并结合基因表达与空间邻域信息,帮助研究者直观揭示细胞类型分布、基因表达模式及空间相互作用,从而深入挖掘空间组学数据的生物学意义。

weixin_29081703的博客 446

C++继承与多态 - 继承多态原理01

C++继承多态原理讲解

大秦坑王的专栏 2979

【大数据开发】Hive——基本语法、常用子句、深入JOIN day44

一、Hive基本语法 hive的执行时由;号驱动的,一个;号就是一条语句的结尾 建表语法 create [temporary][external] table [if not exsist] table_name( [columname columtype [comment '']] )[comment ''] --字段可以有说明,表也可以有说明 [paritioned by [(columname columtype [comment '']])] --分区 [clustered by [(col

白色风车 526

告别Arduino IDE!用VSCode搭建Arduino UNO R3开发环境(含代码补全配置)

本文详细指导如何用VSCode替代Arduino IDE搭建Arduino UNO R3开发环境,包含代码补全配置和高效开发技巧。通过安装必要插件、配置项目结构和优化工作流,可显著提升开发效率,特别适合复杂项目开发。文章还提供了常见问题解决方案和高级功能调优方法。

weixin_30698297的博客 478

hive的优化方案

1.优化之分区 对数据进行分区,可以将数据以一种符合逻辑的方式进行组织(比如分层存储),同时极大提高查询性能。 在创建表的时候,根据后续查询需求’PARTITIOED BY( )'对数据进行合理的分区,下面我们根据‘province’和‘city’进行对数据进行分区分区: CREATE TABLE IF NOT EXISTS tbl_per_info (no INT, name STRING, s...

左手coding,右手cooking 374

【Bug已解决】codex: conversation context window exceeded / Token limit reached — CodeX CLI 上下文窗口超限解决方案

CodeX CLI 上下文窗口超限(context_length_exceeded)的解决方案,含开新会话、更大窗口模型、精简提示与限制工具输出。

博客 4181

Scale-up,scale-out技术概述

本文系统分析了Scale-up与Scale-out两种扩展技术在现代计算中的应用与发展。Scale-up通过增强单节点性能,适用于高耦合任务,而Scale-out通过横向扩展节点,实现高可用性和无限扩展。在芯片层面,Chiplet技术推动Scale-up发展;在数据中心层面,二者协同工作构建强大集群。光模块在长距离高带宽传输中发挥关键作用。文章对比了NVIDIA、AMD和Broadcom三家公司的技术路线,指出NVIDIA采用封闭生态,AMD选择开放标准,Broadcom则主导底层连接技术。未来发展方向将聚

元直的博客 1446

Hive学习(21)-Hive优化策略

原文来自:扎心了,老铁的《Hive学习之路 (二十一)Hive 优化策略》 

上海一九四三 275

某城商银行生产容器云平台详细设计方案分享及经验总结

AS3模式的CIS容器部署在K8S集群内,作为F5的控制器,CIS容器通过对K8S集群内Configmap资源进行监控,将Configmap资源中的内容转化为F5的配置,将配置推送给 F5 ,CIS容器还通过K8S标准的API接口完成业务发现和实时监听集群内Pod的变化,一旦Pod发生变化,相应的更新会及时推送给F5,并完成更新。容器技术发展非常迅速,现在应用大多以容器作为承载介质,前两年在容器云上承载的应用类型主要是Web类,随着容器云领域的不断发展,越来越多的应用类型将迁移至容器云,包括有状态应用。

qq_61890005的博客 857

hive学习07-常见的优化

基础每天学习: 1.行转列: case ... when ...then....else ...end as xxx 2. “fields terminated by”:字段与字段之间的分隔符。“collection items terminated by”:一个字段中各个子元素 item 的分隔符。 3.数据仓库中常见的分区 数据仓库分区:时间(天)、数据来源(app、m、pc) ...

weixin_30393907的博客 95

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【大数据进阶第三阶段之Hive学习笔记】Hive查询、函数、性能优化

Hive UDF开发流程继承UDF类或GenericUDF类重写evaluate()方法并实现函数逻辑编译打包为jar文件复制到正确的HDFS路径使用jar创建临时/永久函数调用函数1.创建一个Maven工程Hive2.导入依赖3.创建一个类方法一(创建临时函数):4.打成jar包上传到服务器/opt/testudf.jar5.将jar包添加到hive的classpath(linux路径)

一个老码农 1491

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

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

HIVE优化学习

1.概述   继续《那些年使用Hive踩过的坑》一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题。下面开始本篇文章的优化介绍。 2.介绍   首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据量大不是问题,数据倾斜是个问题。 jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产...

福州大数据 hadoop学习 287

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Hive学习】Hive SQL的优化

HQL优化要点摘要:1.查询剪裁:避免SELECT*,优先使用分区过滤;外关联时过滤条件写在ON中而非WHERE。2.减少COUNT DISTINCT:大数据量时可改用GROUP BY+COUNT替代。3.避免多对多关联:确保至少一个表的关联键唯一,防止数据倾斜。4.合理使用MapJoin、UNION ALL和并行执行。5.控制Map/Reduce数量:根据数据量调整任务数,避免过多小文件或单个任务负载过重。6.处理数据倾斜:空值/特殊值单独处理,JOIN键加随机数。7.中间结果压缩:启用LZO/Gzip压

xinghaoyan的专栏 609

学习Hive(五)Hive 优化

Hive优化核心思想是把Hive Sql当做MapReduce去优化。 1、select查询本表、where进队本表字段做过滤时不会转为MapReduce执行。 原因:Hive抓取策略配置。Set hive.fetch.task.conversion=none/more; 默认配置为more.所以对部分查询不会转为MapReduce执行。 2、Hive sql转为MapReduce的过程:...

赵俊杰 417

Hive优化学习

一般情况下,我们写SQL是有一部分的SQL是只会用到表中的部分的列,并不是要全部的列。这种场景下,就可以只加载用到的列即可。不用到的不去加载(必须是列式存储)。概念:尽量减少在读取的时候读取的数据量的大小。1.ORC存储(列存储)2.查询只用到的部分的列。

qq_40515250的博客 376

Hive学习(三)操作Hive的方式及优化

一、Beenline 之前在操作hive的是,直接通过hive命令进入hive cli进行数据分析以及处理,这种方式既不安全有不规范 beeline是一个新兴的cli客户端 类似jdbc/odbc 可以解决一切的问题,并且还能够很好的解耦合 hive client直接连接HDFS、yarn beeline需要先与thriftserver连接,thriftserver能够进行安全认证、可靠认证、...

滴水穿石的博客 670

Hive学习笔记--Hive 优化

第一部分:Hadoop 计算框架的特性 什么是数据倾斜 •由于数据的不均衡原因,导致数据分布不均匀,造成数据大量的集中到一点,造成数据热点 Hadoop框架的特性 •不怕数据大,怕数据倾斜 •jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个jobs,耗时很长。原因是map reduce作业初始化的时间是比较长的 •su

寂寞相思鸟 729

hive学习(八)hive优化

Hive 优化 1.核心思想: 把Hive SQL 当做Mapreduce程序去优化 以下SQL不会转为Mapreduce来执行 select仅查询本表字段 where仅对本表字段做条件过滤 Explain 显示执行计划 EXPLAIN [EXTENDED] query 2.Hive运行方式: 本地模式 集群模式 2.1开启本地模式: s...

weixin_30448685的博客 95

【Hive】学习与优化1

case when SQL之CASE WHEN用法详解 SQL Case when 的使用方法

littlemichelle 683

Hive学习笔记(15)- Hive 优化

1 Hive 优化 1.1 hive.fetch.task.conversion &amp;lt;property&amp;gt; &amp;lt;name&amp;gt;hive.fetch.task.conversion&amp;lt;/name&amp;gt; &amp;lt;value&amp;gt;more&amp;lt;/value&amp;gt; &amp;lt;descriptio

一角残叶的博客 553

hive学习之企业优化思路

hive学习之企业优化思路 执行计划(explain) 基本语法 explain【extended】 + hql语句 示例 explain select deptno, avg(sal) avg_sal from emp group by deptno; +----------------------------------------------------+ | Explain | +---------------

weixin_44178366的博客 191

Hive学习(三)---hive的DML,DLL以及hive的优化

DDL数据定义 1)创建数据库 -》查看数据库 show databases; -》创建数据库 create database hive_db; -》创建数据库标准写法 create database if not exist db_hive; -》创建数据库指定所在hdfs路径 create database hive_db1 location '/hive_db'; 2)修改数据库 -》查看...

会写Bug的攻城狮 560
上一篇: Centos7安装CDH问题复现
下一篇: spark2-submit提交python任务
Yuan_CSDF
博客等级 码龄10年 169粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值