当前位置: 首页 > news >正文

Hive企业级调优[5]—— HQL语法优化之数据倾斜

目录

 HQL语法优化之数据倾斜

 数据倾斜概述

 分组聚合导致的数据倾斜

 优化说明

 优化案例

 Join导致的数据倾斜

 优化说明

 优化案例


 HQL语法优化之数据倾斜

 数据倾斜概述

数据倾斜问题通常指的是参与计算的数据分布不均,即某个key或某些key的数据量远超其他key,导致在shuffle阶段,大量相同key的数据被发送到同一个Reduce节点,从而使该Reduce节点所需的时间远超其他Reduce节点,成为整个任务的瓶颈。Hive中的数据倾斜常见于分组聚合和join操作的场景中。

 分组聚合导致的数据倾斜

 优化说明

在Hive中,未经优化的分组聚合是通过一个MapReduce Job来实现的。Map端负责读取数据并按分组字段进行分区,通过shuffle将数据发送到Reduce端,在此完成最终的聚合运算。如果分组字段的值分布不均,则可能导致大量相同key的数据进入同一个Reduce,从而引起数据倾斜。

针对由分组聚合导致的数据倾斜问题,有两种解决思路:

  1. 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堆内存的最大比例)
  2. 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;

优化思路

  1. Map-Side聚合 设置参数:
    • set hive.map.aggr=true;
    • set hive.groupby.skewindata=false;
  2. 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导致的数据倾斜问题,有如下三种解决方案:

  1. 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时的小表之和阈值)
  2. Skew Join Skew Join的原理是为倾斜的大key单独启动一个map join任务进行计算,其余key进行正常的common join。相关参数包括:

    • set hive.optimize.skewjoin=true; (启用skew join优化)
    • set hive.skewjoin.key=100000; (触发skew join的阈值)
  3. 调整SQL语句 若参与join的两表均为大表,其中一张表的数据是倾斜的,可以通过调整SQL语句的方式来进行优化。

 优化案例

示例SQL语句

hive (default)> select * from order_detail od join province_info pi on od.province_id=pi.id;

优化思路

  1. Map Join 设置参数:

    • set hive.auto.convert.join=true;
    • set hive.optimize.skewjoin=false;
  2. Skew Join 设置参数:

    • set hive.optimize.skewjoin=true;
    • set hive.auto.convert.join=false;

相关文章:

Hive企业级调优[5]—— HQL语法优化之数据倾斜

目录 HQL语法优化之数据倾斜 数据倾斜概述 分组聚合导致的数据倾斜 优化说明 优化案例 Join导致的数据倾斜 优化说明 优化案例 HQL语法优化之数据倾斜 数据倾斜概述 数据倾斜问题通常指的是参与计算的数据分布不均,即某个key或某些key的数据量远超其他key&#xff…...

表示速度的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++门迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我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 <…...

用最通俗易懂的语言和例子讲解三维点云

前言&#xff1a; 我整体的学习顺序是看的按B站那“唯一”的三维点云的视频学习的&#xff08;翻了好久几乎没有第二个...&#xff09;对于深度学习部分&#xff0c;由于本人并没有进行学习&#xff0c;所以没有深究。大多数内容都进行了自己的理解并找了很多网络的资源方便理解…...

VM虚拟机下载以及激活

传统的官网已经找不到下载了&#xff0c;这里我将下载好的放在阿里云盘&#xff0c;百度云盘太慢了&#xff0c;懂得都得 阿里云盘分享 下载好了后会是一个exe文件&#xff0c;直接双击运行就可 下载无脑下一步即可&#xff0c;这里不做介绍 下载好了后&#xff0c;需要密钥这里…...

详解Ajax与axios的区别

Ajax与Axios在Web开发中都是用于发送HTTP请求的技术&#xff0c;但它们在多个方面存在显著的差异。以下是对两者区别的详细解析&#xff1a; 1. 技术原理 Ajax&#xff1a;Asynchronous JavaScript and XML&#xff08;异步JavaScript和XML&#xff09;的缩写&#xff0c;是一…...

golang学习笔记28——golang中实现多态与面向对象

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。

一、问题描述 运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行&#xff0c;然后重新运行。 二、问题分析 在idea中&#xff0c;运行一个springboot项目&#xff0c;在使用大量的库和依赖的时候&#xff0c;会出现报错“命令行过长”&…...

k8s自动清理pod脚本分享

检查会遇到集群节点内存消耗超过90%&#xff0c;我们可以筛选一些可以进行重启的pods&#xff0c;如脚本中涉及svc-开头的&#xff0c;进行触发即重启的shell编写。此项会涉及metrics组件需要安装。 #!/bin/bash# 设置内存使用率阈值为90% MEMORY_THRESHOLD90# 初始化一个数组…...

Go并发编程的高级技巧——请求复制与限流

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在一些高性能应用场景中,快速响应是非常重要的目标。例如,当一个应用需要快速响应用户的HTTP请求,或从多个副本中检索数据时,如何优化请求处理成为关键。本文将讨论如何在Go语言中,通过并发和限流机制来实现…...

网站建设模板选择哪种

在选择网站建设模板时&#xff0c;需要考虑多个因素&#xff0c;包括网站的目的、受众、内容类型以及个性化需求等。以下是一些常见的网站建设模板类型&#xff0c;以及它们的特点&#xff0c;希望对你的选择有所帮助。 企业/商务模板&#xff1a; 企业和商务网站通常需要专业、…...

【linux】kill命令

kill 命令在 Linux 和类 Unix 系统中用于向进程发送信号&#xff0c;默认情况下是发送 SIGTERM&#xff08;信号 15&#xff09;&#xff0c;请求程序终止运行。如果程序没有响应 SIGTERM 信号&#xff0c;可以使用 SIGKILL&#xff08;信号 9&#xff09;强制终止进程&#xf…...

Python基础 | 在虚拟环境中安装并在指定文件夹中打开Jupyter notebook

在虚拟环境中安装并在指定文件夹中打开Jupyter notebook 前言一、在虚拟环境下安装Jupyter notebook二、在指定路径下打开Jupyter notebook 前言 Jupyter Notebook 是一个基于 Web 的交互式计算环境&#xff0c;主要功能是将代码、文本、数学方程式、可视化和其他相关元素组合…...

1.Spring-容器-注册

一、Bean和获取Bean &#xff08;1&#xff09;创建IoC容器&#xff1a; SpringApplication.run(类名.class, args); ConfigurableApplicationContext ioc SpringApplication.run(Spring01IocApplication.class, args); &#xff08;2&#xff09;将对象注册到IoC容器中&am…...

Mapper.xml SQL大于小于号转义符

Mapper.xml中写的SQL语句&#xff0c;大于小于号字符直接写会报错&#xff0c;需要变成转义字符 对应如下&#xff1a; Mapper.xml SQL大于小于号转义符...

Linux:进程(三)——进程状态

目录 Linux源代码对进程的描述 R S D T t X Z&#xff08;进程僵尸&#xff09; 孤儿进程 Linux源代码对进程的描述 理论上把进程状态大致被分为了&#xff1a;运行、阻塞、挂起。那么&#xff0c;在操作系统中具体是如何描述状态的。&#xff08;有时候Linux内核也把…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...