Hive企业级调优[5]—— HQL语法优化之数据倾斜
目录
HQL语法优化之数据倾斜
数据倾斜概述
分组聚合导致的数据倾斜
优化说明
优化案例
Join导致的数据倾斜
优化说明
优化案例
HQL语法优化之数据倾斜
数据倾斜概述
数据倾斜问题通常指的是参与计算的数据分布不均,即某个key或某些key的数据量远超其他key,导致在shuffle阶段,大量相同key的数据被发送到同一个Reduce节点,从而使该Reduce节点所需的时间远超其他Reduce节点,成为整个任务的瓶颈。Hive中的数据倾斜常见于分组聚合和join操作的场景中。
分组聚合导致的数据倾斜
优化说明
在Hive中,未经优化的分组聚合是通过一个MapReduce Job来实现的。Map端负责读取数据并按分组字段进行分区,通过shuffle将数据发送到Reduce端,在此完成最终的聚合运算。如果分组字段的值分布不均,则可能导致大量相同key的数据进入同一个Reduce,从而引起数据倾斜。
针对由分组聚合导致的数据倾斜问题,有两种解决思路:
-
Map-Side聚合 开启Map-Side聚合后,数据会在Map端完成部分聚合工作。即使原始数据是倾斜的,经过Map端的初步聚合后,发送给Reduce的数据也会更加均匀,从而减轻数据倾斜的问题。相关参数包括:
set hive.map.aggr=true;(启用map-side聚合)set hive.map.aggr.hash.min.reduction=0.5;(用于检测源表是否适合进行map-side聚合)set hive.groupby.mapaggr.checkinterval=100000;(用于检测源表是否适合map-side聚合的条数)set hive.map.aggr.hash.force.flush.memory.threshold=0.9;(map-side聚合所用的hash table,占用map task堆内存的最大比例)
-
Skew-GroupBy优化 Skew-GroupBy优化的原理是启动两个MR任务,第一个MR任务按照随机数分区,将数据分散发送到Reduce,完成部分聚合;第二个MR任务按照分组字段分区,完成最终的聚合。相关参数包括:
set hive.groupby.skewindata=true;(启用分组聚合数据倾斜优化)
优化案例
示例SQL语句
hive (default)> select province_id, count(*) from order_detail group by province_id;
优化思路
- Map-Side聚合 设置参数:
set hive.map.aggr=true;set hive.groupby.skewindata=false;
- Skew-GroupBy优化 设置参数:
set hive.groupby.skewindata=true;set hive.map.aggr=false;
Join导致的数据倾斜
优化说明
未经优化的join操作,默认使用common join算法,通过一个MapReduce Job完成计算。Map端负责读取join操作所需表的数据,并按照关联字段进行分区,通过shuffle发送到Reduce端,在此完成最终的join操作。如果关联字段的值分布不均,则可能导致大量相同key的数据进入同一个Reduce,从而引起数据倾斜。
对于由join导致的数据倾斜问题,有如下三种解决方案:
-
Map Join 使用map join算法可以在Map端完成join操作,无需shuffle和reduce阶段,适用于大表join小表时发生数据倾斜的情况。相关参数包括:
set hive.auto.convert.join=true;(启动Map Join自动转换)set hive.mapjoin.smalltable.filesize=250000;(Common Join转为Map Join的判断条件)set hive.auto.convert.join.noconditionaltask=true;(开启无条件转Map Join)set hive.auto.convert.join.noconditionaltask.size=10000000;(无条件转Map Join时的小表之和阈值)
-
Skew Join Skew Join的原理是为倾斜的大key单独启动一个map join任务进行计算,其余key进行正常的common join。相关参数包括:
set hive.optimize.skewjoin=true;(启用skew join优化)set hive.skewjoin.key=100000;(触发skew join的阈值)
-
调整SQL语句 若参与join的两表均为大表,其中一张表的数据是倾斜的,可以通过调整SQL语句的方式来进行优化。
优化案例
示例SQL语句
hive (default)> select * from order_detail od join province_info pi on od.province_id=pi.id;
优化思路
-
Map Join 设置参数:
set hive.auto.convert.join=true;set hive.optimize.skewjoin=false;
-
Skew Join 设置参数:
set hive.optimize.skewjoin=true;set hive.auto.convert.join=false;
相关文章:
Hive企业级调优[5]—— HQL语法优化之数据倾斜
目录 HQL语法优化之数据倾斜 数据倾斜概述 分组聚合导致的数据倾斜 优化说明 优化案例 Join导致的数据倾斜 优化说明 优化案例 HQL语法优化之数据倾斜 数据倾斜概述 数据倾斜问题通常指的是参与计算的数据分布不均,即某个key或某些key的数据量远超其他keyÿ…...
表示速度的speed与velocity语义辨析
speed 对应的中文是 速度, 比如 5KM/h, 但是语义中不带方向,所以一般用来表示标量(scalar)。velocity 对应的中文也是 速度, 比如 5KM/h, 语义中蕴含了方向, 常用于表示向量(vector)。 2024年09月22日...
Electron 图标修改
目录 1. 图片基本要求 2. 在main.js中配置icon 位置 3. 在package.json 中配置icon 位置 4. 问题:左上角图片 开发环境下显示,生产环境下不显示 1. 图片基本要求 图片格式为ico,图片像素像素为256*256; 将ico文件放在pub…...
项目扩展二:消息拉取功能的实现
项目扩展二:消息拉取功能的实现 一、回顾一下消息推送功能是如何实现的二、设计消息拉取功能1.服务器如何处理2.定义Request和Response1.定义Request2.proto文件 三、服务器实现消息拉取1.业务模块的实现:信道模块2.消费者管理模块实现O(1)获取消费者1.目…...
C语言6大常用标准库 -- 4.<math.h>
目录 引言 4. C标准库--math.h 4.1 简介 4.2 库变量 4.3 库宏 4.4 库函数 4.5 常用的数学常量 🌈你好呀!我是 程序猿 🌌 2024感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长&…...
【图像匹配】基于SIFT算法的图像匹配,matlab实现
博主简介:matlab图像代码项目合作(扣扣:3249726188) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于基于SIFT算法的图像匹配,用matlab实现。 一、案例背景和算法介绍 本…...
C++门迷宫
目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好,我叫这是我58。 程序 #include <iostream> using namespace std; void printmaze(const char strmaze[11][11]) {int i 0;int ia 0;for (; i < 11; i) {for (ia 0; ia <…...
用最通俗易懂的语言和例子讲解三维点云
前言: 我整体的学习顺序是看的按B站那“唯一”的三维点云的视频学习的(翻了好久几乎没有第二个...)对于深度学习部分,由于本人并没有进行学习,所以没有深究。大多数内容都进行了自己的理解并找了很多网络的资源方便理解…...
VM虚拟机下载以及激活
传统的官网已经找不到下载了,这里我将下载好的放在阿里云盘,百度云盘太慢了,懂得都得 阿里云盘分享 下载好了后会是一个exe文件,直接双击运行就可 下载无脑下一步即可,这里不做介绍 下载好了后,需要密钥这里…...
详解Ajax与axios的区别
Ajax与Axios在Web开发中都是用于发送HTTP请求的技术,但它们在多个方面存在显著的差异。以下是对两者区别的详细解析: 1. 技术原理 Ajax:Asynchronous JavaScript and XML(异步JavaScript和XML)的缩写,是一…...
golang学习笔记28——golang中实现多态与面向对象
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。
一、问题描述 运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。 二、问题分析 在idea中,运行一个springboot项目,在使用大量的库和依赖的时候,会出现报错“命令行过长”&…...
k8s自动清理pod脚本分享
检查会遇到集群节点内存消耗超过90%,我们可以筛选一些可以进行重启的pods,如脚本中涉及svc-开头的,进行触发即重启的shell编写。此项会涉及metrics组件需要安装。 #!/bin/bash# 设置内存使用率阈值为90% MEMORY_THRESHOLD90# 初始化一个数组…...
Go并发编程的高级技巧——请求复制与限流
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在一些高性能应用场景中,快速响应是非常重要的目标。例如,当一个应用需要快速响应用户的HTTP请求,或从多个副本中检索数据时,如何优化请求处理成为关键。本文将讨论如何在Go语言中,通过并发和限流机制来实现…...
网站建设模板选择哪种
在选择网站建设模板时,需要考虑多个因素,包括网站的目的、受众、内容类型以及个性化需求等。以下是一些常见的网站建设模板类型,以及它们的特点,希望对你的选择有所帮助。 企业/商务模板: 企业和商务网站通常需要专业、…...
【linux】kill命令
kill 命令在 Linux 和类 Unix 系统中用于向进程发送信号,默认情况下是发送 SIGTERM(信号 15),请求程序终止运行。如果程序没有响应 SIGTERM 信号,可以使用 SIGKILL(信号 9)强制终止进程…...
Python基础 | 在虚拟环境中安装并在指定文件夹中打开Jupyter notebook
在虚拟环境中安装并在指定文件夹中打开Jupyter notebook 前言一、在虚拟环境下安装Jupyter notebook二、在指定路径下打开Jupyter notebook 前言 Jupyter Notebook 是一个基于 Web 的交互式计算环境,主要功能是将代码、文本、数学方程式、可视化和其他相关元素组合…...
1.Spring-容器-注册
一、Bean和获取Bean (1)创建IoC容器: SpringApplication.run(类名.class, args); ConfigurableApplicationContext ioc SpringApplication.run(Spring01IocApplication.class, args); (2)将对象注册到IoC容器中&am…...
Mapper.xml SQL大于小于号转义符
Mapper.xml中写的SQL语句,大于小于号字符直接写会报错,需要变成转义字符 对应如下: Mapper.xml SQL大于小于号转义符...
Linux:进程(三)——进程状态
目录 Linux源代码对进程的描述 R S D T t X Z(进程僵尸) 孤儿进程 Linux源代码对进程的描述 理论上把进程状态大致被分为了:运行、阻塞、挂起。那么,在操作系统中具体是如何描述状态的。(有时候Linux内核也把…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
