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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146968.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu 安装minikube,并拉取k8s镜像

不要使用最新版,重要的事情说三遍,刚开始也是最求新一点的版本,但问题很多,主要是版本之间的依赖问题,不是某个依赖的版本不支持某些功能,就是依赖之间的版本不能对应上,所以就降低几个版本&…

行业人工智能研究-Python自监督方式学习图像表示算法

学术界人工智能研究落后于工业界 摘要 行业或工业界在人工智能研究上超出学术界,并占据着大量的计算力,数据集和人才诱人的薪水和明朗的预期吸引大量人才离开学术界,涌入行业或工业界即使,比如Meta开源其人工智能模型&#xff0…

实验:WLAN无线综合实验

无线综合实验的概述: WLAN无线综合实验是一种针对无线网络技术的综合性实验,旨在通过实践操作加深对无线局域网(WLAN)技术的理解和应用能力。以下是对该实验的详细概述: 实验目的 掌握认证AP上线的配置方法&#xff…

[SAP ABAP] 创建域

我们可以使用事务码SE11创建域 输入要创建的域的名称,然后点击创建 输入简短描述,选择数据类型和输入字符数 激活并保存域,创建的域才能够生效

pg入门18—如何使用pg gis

1. 下载postgre gis镜像 2. 运行镜像 docker run -p 15432:5432 -d -e POSTGRES_PASSWORDAb123456! postgis/postgis:12-3.4-alpine 3. 使用gis # 进入容器,登录pgdocker exec -it bash# 登录数据库psql -U postgres# 创建数据库CREATE DATABASE mygeotest;# 使用…

Spring Boot 入门:解锁 Spring 全家桶

前言 Spring 全家桶是现代 Java 开发者不可或缺的工具集,它提供了从轻量级的框架到微服务架构的完整支持。本文将带你快速了解 Spring 框架、核心概念如 IoC(控制反转)和 AOP(面向切面编程),并深入介绍 Sp…

YOLOv10多模态 结合Transformer与NMS-Free 融合可见光+红外光(RGB+IR)双输入【附代码】

文章目录 前言视频效果代码获取文章概述必要环境一、模型训练1、 定义数据1.1、数据集结构1.2、定义data.yaml 2、 运行方法运行效果 二、模型验证运行方法运行效果 三、模型推理3.1. 推理图像1. 参数定义2. 运行方法运行效果 3.2. 推理视频1. 参数定义2. 运行方法运行效果 四、…

构建高可用和高防御力的云服务架构第一部分:深入解析DDoS高防(1/5)

引言 在数字化时代,网络安全已成为全球关注的焦点。随着互联网技术的快速发展和应用的广泛深入,网络安全形势日益严峻。特别是分布式拒绝服务(DDoS)攻击,以其破坏性强、难以防范的特点,对个人、企业乃至国…

Go-知识-定时器

Go-知识-定时器 1. 介绍2. Timer使用场景2.1 设定超时时间2.2 延迟执行某个方法 3. Timer 对外接口3.1 创建定时器3.2 停止定时器3.3 重置定时器3.4 After3.5 AfterFunc 4. Timer 的实现原理4.1 Timer数据结构4.1.1 Timer4.1.2 runtimeTimer 4.2 Timer 实现原理4.2.1 创建Timer…

Type-C 诱骗取电快充协议芯片,支持取电电压5V、9V、12V、15V、20V

‌XSP01A快充协议芯片‌是一款集成USB Power Delivery(PD) 2.0/3.0快充协议的USB-C/Type-C多功能取电芯片 它支持从手机充电器、车充等电源上取电给产品供电。这款芯片的优势在于其价格便宜,同时能够实现快充,对于不需要支持太多协议的设备来说&#x…

DRV8825步进电机驱动详细说明书————含接线图

最近玩步进电机时候,发现步进电机驱动种类多;A4988,drv8825,tb6600,lv8731……;tb6600驱动电流可达4A,1600细分,十分强大,但是体积大,用在平衡车上不太合适。 drv8825加散热器驱动电…

安装SQL Server遇到的问题

出现了一和二的问题,最后还是通过三完全卸载sqlserver安装成功了 一.安装过程中依次报错 1.MOF编译器无法连接WMI服务器。原因可能是语义错误(例如,与现有WMI知识库不兼容)或实际错误(例如WMI服务器启动失败)。 2.PerfLib 2.0计数器removal失败&#xf…

HarmonyOS鸿蒙开发实战(5.0)表情图片聊天案例实践

鸿蒙HarmonyOS NEXT开发实战往期文章必看(持续更新......) HarmonyOS NEXT应用开发性能实践总结 HarmonyOS NEXT应用开发案例实践总结合集 最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门…

混合开发-JSBridge

1.1 什么是混合开发? 混合开发是一种融合了原生开发和Web开发优势的移动应用开发方式。 具体来说,混合开发通常指的是利用一种框架或平台来创建应用程序,这种程序结合了原生应用的一些功能和特性(比如访问设备的摄像头、相册、GPS、蓝牙等…

DAMODEL——Llama3.1的部署与使用指南

Llama3.1的部署与使用指南 在自然语言处理(NLP)领域,大模型(LLM)是基于深度学习算法训练而成的重要工具,应用范围包括自然语言理解和生成。随着技术的发展,开源的LLM不断涌现,涵盖了…

Windows上通过VirtualBox安装Linux虚拟机

目录 一、安装VirtualBox 1. 下载VirtualBox 2. 安装VirtualBox 二、使用VirtualBox安装Linux系统 1. 下载Linux镜像 2. 使用VirtualBox新建虚拟环境 三、常见问题解决办法 1. Terminal打不开系统字符乱码 2. 窗口小和分辨率不匹配 一、安装VirtualBox 1. 下载Virtu…

10.2 溪降技术:双重检查

目录 10.2 双重检查概览观看视频课程电子书:双重检查场景场景 1场景 2 个人责任示例 1示例 2 总结 10.2 双重检查 概览 俗话说:“江山易改,本性难移”。在我们开始体验峡谷探险时,培养良好的习惯对我们的进一步发展至关重要。在所…

重生之我们在ES顶端相遇第15 章 - ES 的心脏-倒排索引

文章目录 前言为什么叫倒排索引数据结构如何生成如何查询TF、IDF参考文档 前言 上一章,简单介绍了 ES 的节点类型。 本章,我们要介绍 ES 中非常重要的一个概念:倒排索引。 ES 的全文索引就是基于倒排索引实现的。 本章内容建议重点学习&…

实现人体模型可点击

简化需求:实现项目内嵌人体模型,实现点击不同部位弹出部位名称 一:优先3d, 方案:基于three.js,.gltf格式模型,vue3 缺点:合适且免费的3d模型找不到,因为项目对部位有要…

Python实现贝叶斯优化器(Bayes_opt)优化卷积神经网络-双向长短时记忆循环神经网络回归模型(CNN-BiLSTM回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着大数据和计算能力的提升,深度学习模型在众多领域取得了显著的成功。然而,这…