Hive企业级调优[4]——HQL语法优化之分组聚合优化

HQL语法优化之分组聚合优化

优化说明

在 Hive 中,未经优化的分组聚合通常通过一个 MapReduce Job 实现。Map 端负责读取数据,并按分组字段进行分区,通过 Shuffle 将数据发送至 Reduce 端,在 Reduce 端完成最终的聚合运算。

Hive 对分组聚合的优化主要是为了减少 Shuffle 数据量,具体做法是采用 map-side 聚合。所谓 map-side 聚合,就是在 Map 端维护一个哈希表,利用它来完成部分聚合,然后将部分聚合的结果按照分组字段分区,发送至 Reduce 端以完成最终的聚合。这种方法能够有效地减少 Shuffle 的数据量,从而提高分组聚合运算的效率。

与 map-side 聚合相关的参数包括:

  • 启用 map-side 聚合
    set hive.map.aggr=true;
  • 检测源表数据是否适合进行 map-side 聚合
    • 检测方法是:先对若干条数据进行 map-side 聚合,若聚合后的条数和聚合前的条数比值小于设定值,则认为该表适合进行 map-side 聚合;
    • 否则,认为该表数据不适合进行 map-side 聚合,后续数据便不再进行 map-side 聚合。
    set hive.map.aggr.hash.min.reduction=0.5;
  • 用于检测源表是否适合 map-side 聚合的条数
    set hive.groupby.mapaggr.checkinterval=100000;
  • map-side 聚合所用的哈希表占用 map task 堆内存的最大比例
    • 若超出此值,则会对哈希表进行一次 flush。
    set hive.map.aggr.hash.force.flush.memory.threshold=0.9;
 优化案例

1)示例 SQL:

hive (default)> 
selectproduct_id,count(*)
from order_detail
group by product_id;

2)优化前 未经优化的分组聚合,执行计划如下图所示:(实际图形无法在此文本中展示,请参考执行计划输出结果)

3)优化思路 可以考虑开启 map-side 聚合,配置以下参数:

-- 启用 map-side 聚合,默认是 true
set hive.map.aggr=true;-- 用于检测源表数据是否适合进行 map-side 聚合。检测的方法是:先对若干条数据进行 map-side 聚合,若聚合后的条数和聚合前的条数比值小于该值,则认为该表适合进行 map-side 聚合;否则,认为该表数据不适合进行 map-side 聚合,后续数据便不再进行 map-side 聚合。
set hive.map.aggr.hash.min.reduction=0.5;-- 用于检测源表是否适合 map-side 聚合的条数。
set hive.groupby.mapaggr.checkinterval=100000;-- map-side 聚合所用的哈希表,占用 map task 堆内存的最大比例,若超出该值,则会对哈希表进行一次 flush。
set hive.map.aggr.hash.force.flush.memory.threshold=0.9;

优化后的执行计划如图所示:(同样,实际图形需通过执行 EXPLAIN 命令获得)

 

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

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

相关文章

网页交互模拟:模拟用户输入、点击、选择、滚动等交互操作

目录 一、理论基础 1.1 网页交互模拟的重要性 1.2 网页交互的基本原理 二、常用工具介绍 2.1 Selenium 2.2 Puppeteer 2.3 Cypress 2.4 TestCafe 三、实战案例 3.1 模拟用户输入 3.2 模拟用户点击 3.3 模拟用户选择 3.4 模拟滚动操作 四、最佳实践与优化 4.1 代…

用 Pygame 实现一个乒乓球游戏

用 Pygame 实现一个乒乓球游戏 伸手需要一瞬间,牵手却要很多年,无论你遇见谁,他都是你生命该出现的人,绝非偶然。若无相欠,怎会相见。 引言 在这篇文章中,我将带领大家使用 Pygame 库开发一个简单的乒乓球…

系统优化工具 | Windows Manager v2.0.5 便携版

Windows Manager 是一款专为Microsoft Windows 10/11设计的系统优化和管理软件。它集成了多种实用程序,旨在帮助用户更好地管理和优化Windows操作系统。该软件的功能包括系统清理、系统优化、系统修复、硬件信息查看和系统设置调整等。 系统清理:Window…

Qt Creator项目模板介绍

在Qt Creator中创建项目时,用户可以从多个模板类别中进行选择,以满足不同的开发需求。 Application(Qt) 在Application(Qt)类别下,Qt Creator提供了多种用于创建不同类型Qt应用程序的模板。这些模板主要包括: Qt Widgets Applic…

前缀和与差分(二维)

二维前缀和 下面是一个二维数组,我们要求(1,1)到(2,2)区间内的所有元素的和,最原始的方法就是遍历每个元素然后一个一个加起来,此时时间复杂度为O(n*m)。 我们之前学过…

【计算机网络篇】电路交换,报文交换,分组交换

本文主要介绍计算机网络中的电路交换,报文交换,分组交换,文中的内容是我认为的重点内容,并非所有。参考的教材是谢希仁老师编著的《计算机网络》第8版。跟学视频课为河南科技大学郑瑞娟老师所讲计网。 目录 🎯一.划分…

【实战篇】MySQL是怎么保证主备一致的?

MySQL 主备的基本原理 如图 1 所示就是基本的主备切换流程。 在状态 1 中,客户端的读写都直接访问节点 A,而节点 B 是 A 的备库,只是将 A 的更新都同步过来,到本地执行。这样可以保持节点 B 和 A 的数据是相同的。 当需要切换的…

PostgreSQL JAVA与SQL集成之PL/Java

PostgreSQL pljava PL/Java 作为 PostgreSQL 的编程语言扩展之一,与 PL/pgSQL(PostgreSQL 原生的存储过程语言)相比,提供了 Java 语言特有的面向对象功能,并支持 Java 的标准库和第三方库。由于 Java 是一种跨平台的语…

企业搭建VR虚拟展厅,如何选择搭建平台?

选择虚拟展厅搭建平台时,需要综合考虑多个因素以确保平台能够满足您的具体需求并提供高质量的展示效果。以下是一些关键的选择标准: 1. 技术实力与创新能力 技术平台选择:确保平台支持虚拟现实(VR)、增强现实&#xf…

Qt clicked()、clicked(bool)、toggled(bool)信号的区别和联系

clicked() 信号 所属控件:clicked()信号是QAbstractButton类(及其子类,如QPushButton、QRadioButton、QCheckBox等)的一个信号。clicked信号可以说是许多控件(特别是按钮类控件,如QPushButton)…

基于lnmp搭建wordpress

一、案例目标 (1)了解LNMP环境的组成。 (2)了解LNMP环境的部署与安装。 (2)了解WordPress应用的部署与使用。 二、节点规划 IP 主机名 节点 192.168.200.20 lnmp lnmp服务节点 三、案例实施 LN…

C#基于SkiaSharp实现印章管理(8)

上一章虽然增加了按路径绘制文本,支持按矩形、圆形、椭圆等路径,但测试时发现通过调整尺寸、偏移量等方式不是很好控制文本的位置。相对而言,使用弧线路径,通过弧线起始角度及弧线角度控制文本位置更简单。同时基于路径绘制文本时…

2024 新手指南:轻松掌握 Win10 的录屏操作

之前为了节约成本我们公司都采用录制软件操作都方式来为异地的同事进行远程操作培训的。所以我们尝试了不少的录屏工具,这里我就分享下win10怎么录屏的操作过程。 1.福昕录屏大师 链接:www.foxitsoftware.cn/REC/ 这款录屏工具是初学者的理想之选&…

Linux入门2

文章目录 一、Linux基本命令1.1 文件的创建和查看命令1.2 文件的复制移动删除等命令1.3 查找命令1.4 文件的筛选和管道的使用1.5 echo、tail和重定向符 二、via编辑器三、权限控制3.1 root用户(超级管理员)3.2 用户和用户组3.3 权限信息3.4 chmod命令 一…

【python设计模式4】结构型模式1

目录 适配器模式 桥模式 适配器模式 将一个类的接口转换成客户希望的另外一个接口,适配器使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。实现适配器的两种方式,类适配器使用多继承,对象适配器使用组合。组合就是一个类中放入另…

Django-cookie和session

文章目录 前言CookieSession 一、Django 中 Cookie二、Django 中 Session三.区别 前言 Cookie Cookie 是由服务器发送到用户浏览器的小文件,用于存储用户的相关信息。每次用户访问网站时,浏览器会将这些 cookie 发送回服务器 特点: 1. 数据存储在客户…

网络质量劣化分析:保障业务连续性与网络优化的核心步骤

目录 什么是网络质量劣化? 常见的网络质量劣化表现 网络质量劣化的常见原因 1. 网络设备性能不足或老化 2. 网络配置问题 3. 链路拥塞 4. 外部攻击或恶意流量 案例分析:一次企业内部网络劣化的解决过程 如何防止网络质量劣化? 结语…

【图像检索】基于傅里叶描述子的形状特征图像检索,matlab实现

博主简介:matlab图像代码项目合作(扣扣:3249726188) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于傅里叶描述子的形状特征图像检索,用matlab实现。 一、案例背景和算法…

Python 序列( 列表 字典 元组 集合)

列表简介: 1.列表:用于存储任意数目、任意类型的数据集合。 2.列表是内置可变序列,是包含多个元素的有序连续的内存空间。列表的标准语法格式:a[10,20,30,40]其中,10,20,30,40这些称为:列表a的元素。 3.…

2024年“华为杯”研赛第二十一届中国研究生数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…