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

hive企业级调优策略之分组聚合优化

测试用表准备

hive企业级调优策略测试数据
(阿里网盘下载链接):https://www.alipan.com/s/xsqK6971Mrs

订单表(2000w条数据)

表结构
在这里插入图片描述
建表语句

drop table if exists order_detail;
create table order_detail(id           string comment '订单id',user_id      string comment '用户id',product_id   string comment '商品id',province_id  string comment '省份id',create_time  string comment '下单时间',product_num  int comment '商品件数',total_amount decimal(16, 2) comment '下单金额'
)comment '订单表'partitioned by (dt string)row format delimited fields terminated by '\t'

数据装载
将order_detail.txt文件上传到HDFS,并执行以下导入语句。
注:文件较大,请耐心等待。

load data inpath 'hdfs://flinkv1:8020/input/order_detail.txt' overwrite into table order_detail partition(dt='2020-06-14');

支付表(600w条数据)

表结构
在这里插入图片描述
建表语句

drop table if exists payment_detail;
create table payment_detail(id              string comment '支付id',order_detail_id string comment '订单明细id',user_id         string comment '用户id',payment_time    string comment '支付时间',total_amount    decimal(16, 2) comment '支付金额'
)
partitioned by (dt string)
row format delimited fields terminated by '\t';

数据装载
将payment_detail.txt文件上传HDFS,并执行以下导入语句。
注:文件较大,请耐心等待。

load data inpath 'hdfs://flinkv1:8020/input/payment_detail.txt' overwrite into table payment_detail partition(dt='2020-06-14');

商品信息表(100w条数据)

表结构
在这里插入图片描述
建表语句

drop table if exists product_info;
create table product_info(id           string comment '商品id',product_name string comment '商品名称',price        decimal(16, 2) comment '价格',category_id  string comment '分类id'
)
row format delimited fields terminated by '\t';

数据装载
将product_info.txt文件上传到HDFS,并执行以下导入语句。

load data local inpath '/opt/module/hive/datas/product_info.txt' overwrite into table product_info;

省份信息表(34条数据)

表结构
在这里插入图片描述
建表语句

drop table if exists province_info;
create table province_info(id            string comment '省份id',province_name string comment '省份名称'
)
row format delimited fields terminated by '\t';

数据装载
将province_info.txt文件上传到HDFS,并执行以下导入语句。

load data inpath 'hdfs://flinkv1:8020/input/province_info.txt' overwrite into table province_info;

优化说明

Hive中未经优化的分组聚合,是通过一个MapReduce Job实现的。Map端负责读取数据,并按照分组字段分区,通过Shuffle,将数据发往Reduce端,各组数据在Reduce端完成最终的聚合运算。
Hive对分组聚合的优化主要围绕着减少Shuffle数据量进行,具体做法是map-side聚合。所谓map-side聚合,就是在map端维护一个hash table,利用其完成部分的聚合,然后将部分聚合的结果,按照分组字段分区,发送至reduce端,完成最终的聚合。map-side聚合能有效减少shuffle的数据量,提高分组聚合运算的效率。

map-side 聚合相关的参数如下:

启用map-side聚合

set hive.map.aggr=true;

用于检测源表数据是否适合进行map-side聚合,根据设置的比例系数进行检测,如果设置为1将不在进行检测,所有数据都进行map-side聚合。检测的方法是:先对若干条数据进行map-side聚合,若聚合后的条数和聚合前的条数比值小于该值,则认为该表适合进行map-side聚合;否则,认为该表数据不适合进行map-side聚合,例如根据主键ID进行分组,那么map端即时聚合也没有作用,反而多此一举浪费资源,后续数据便不再进行map-side聚合。

set hive.map.aggr.hash.min.reduction=0.5;

–用于检测源表是否适合map-side聚合的条数。

set hive.groupby.mapaggr.checkinterval=100000;

如果统计数据远大于分组值(例如100000条数据,计算每个省份的条数,省份可以确认34个,那么统计条数远大于分组值)我们可以直接把检测比例系数设置为1,检测源表数据设置为0;免去检测直接进行map-side聚合。

set hive.map.aggr.hash.min.reduction=1;
set hive.groupby.mapaggr.checkinterval=1;

map-side聚合所用的hash table,占用map task堆内存的最大比例,若超出该值,则会对hash table进行一次flush。(默认不需要调整,出现问题在进行调整)

set hive.map.aggr.hash.force.flush.memory.threshold=0.9;

优化案例

(1)示例SQL

selectprovince_id,count(*)
from order_detail
group by province_id;

关闭map-side优化:
在这里插入图片描述
在这里插入图片描述

(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=1;

在这里插入图片描述

–用于检测源表是否适合map-side聚合的条数。

set hive.groupby.mapaggr.checkinterval=0;

在这里插入图片描述

–map-side聚合所用的hash table,占用map task堆内存的最大比例,若超出该值,则会对hash table进行一次flush。

set hive.map.aggr.hash.force.flush.memory.threshold=0.9;

在这里插入图片描述
再次执行,耗时显而易见减少。
在这里插入图片描述

优化后的执行计划如图所示:
在这里插入图片描述

相关文章:

hive企业级调优策略之分组聚合优化

测试用表准备 hive企业级调优策略测试数据 (阿里网盘下载链接):https://www.alipan.com/s/xsqK6971Mrs 订单表(2000w条数据) 表结构 建表语句 drop table if exists order_detail; create table order_detail(id string comment 订单id,user_id …...

英码科技受邀参加2023计算产业生态大会,分享智慧轨道交通创新解决方案

12月13-14日,“凝心聚力,共赢计算新时代”——2023计算产业生态大会在北京香格里拉饭店成功举办。英码科技受邀参加行业数字化分论坛活动,市场总监李甘来先生现场发表了题为《AI哨兵,为铁路安全运营站好第一道岗》的精彩主题演讲&…...

【openssl】Linux升级openssl-1.0.1到1.1.1

文章目录 前言一、openssl是什么?二、使用步骤1.下载2.编译安装3.一些问题 总结 前言 记录一次openssl的升级,1.0.1升级到1.1.1 一、openssl是什么? OpenSSL是一个开源的加密工具包,广泛用于安全套接层(SSL&#xff…...

美国联邦机动车安全标准-FMVSS

FMVSS标准介绍: FMVSS是美国《联邦机动车安全标准》,由美国运输部下属的国家公路交通安全管理局(简称NHTSA)具体负责制定并实施。是美国联邦政府针对机动车制定的安全标准,旨在提高机动车的安全性能,减少交通事故中的人员伤亡。F…...

龙迅LT6211B,HDMI1.4转LVDS,应用于AR/VR市场

产品描述 LT6211B 是一款用于 VR/ 显示应用的高性能 HDMI1.4 至 LVDS 芯片。 对于 LVDS 输出,LT6211B 可配置为单端口、双端口或四端口。对于2D视频流,同一视频流可以映射到两个单独的面板,对于3D视频格式,左侧数据可以发送到一个…...

解决docker拉取镜像错误 missing signature key 问题

核心原因:本地docker版本过低,需要: 1. 彻底卸载本地docker文件 2. 配置yum 镜像文件, 重新安装最新版本 相信教程可参考: CentOS安装Docker(超详细)_centos 安装docker-CSDN博客...

倒计数器:CountDownLatch

CountDownLatch 是 Java 中用于多线程编程的一个同步工具。 它允许一个或多个线程等待其他线程执行完特定操作后再继续执行。 CountDownLatch 通过一个计数器来实现, 该计数器初始化为一个正整数,每当一个线程完成了指定操作,计数器就会减一。…...

vue内容渲染

内容渲染指令用来辅助开发者渲染DOM元素的文本内容。常用的内容渲染指令有3个 1.v-text 缺点:会覆盖元素内部原有的内容 2.{{}}:插值表达式在实际开发中用的最多,只是内容的占位符,不会覆盖内容 3.v-html:可以把带有标…...

Kafka为什么能高效读写数据

1)Kafka 本身是分布式集群,可以采用分区技术,并行度高(生产消费方并行度高); 2)读数据采用稀疏索引,可以快速定位要消费的数据; 3)顺序写磁盘; …...

Flink系列之:Table API Connectors之Debezium

Flink系列之:Table API Connectors之Debezium 一、Debezium二、依赖三、使用Debezium Format四、可用元数据五、Format参数六、重复的变更事件七、消费 Debezium Postgres Connector 产生的数据八、数据类型映射 一、Debezium Debezium 是一个 CDC(Chan…...

【Python基础】文件读写

文章目录 [toc]打开文件open()函数参数解析示例 文件路径绝对路径示例 相对路径示例 打开文件的模式常用模式 读文件示例 写文件示例 按行读写文件readline()示例 readlines()示例 writelines()示例 关闭文件示例finally语句示例 上下文管理器示例 自定义读写类示例 打开文件 …...

电脑风扇控制软件Macs Fan Control mac支持多个型号

Macs Fan Control mac是一款专门为 Mac 用户设计的软件,它可以帮助用户控制和监控 Mac 设备的风扇速度和温度。这款软件允许用户手动调整风扇速度,以提高设备的散热效果,减少过热造成的风险。 Macs Fan Control 可以在菜单栏上显示当前系统温…...

clangd:Couldn‘t build compiler instance

在使用vscode clangd 搭建RK3588 5.10版本linux内核代码开发环境时,使用bear生成 compile_commands.json时,clangd生成标签失败代码无法跳转,查看clangd日志,发现标签生成失败,失败原因:Couldnt build comp…...

Springboot启动出现Error to process server push response的解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法前言 注意,此篇博客只提供一种bug排查思路,毕竟每个项目引起的依赖包冲突都不一致! 1. 问题所示 启动Springboot的时候,5秒刷一次这个,大致如下: 2023-12-17 13:02:01.166 WARN 20196 --- [ main] o.s.boot.ac…...

P2P网络下分布式文件共享场景的测试

P2P网络介绍 P2P是Peer-to-Peer的缩写,“Peer”在英语里有“对等者、伙伴、对端”的意义。因此,从字面意思来看,P2P可以理解为对等网络。国内一些媒体将P2P翻译成“点对点”或者“端对端”,学术界则统一称为对等网络(Peer-to-Pee…...

计算机组成原理综合1

1、完整的计算机系统应包括______。D A. 运算器、存储器和控制器 B. 外部设备和主机 C. 主机和实用程序 D. 配套的硬件设备和软件系统 2、计算机系统中的存储器系统是指______。D A. RAM存储器 B. ROM存储器 C. 主存储器 …...

探秘 AJAX:让网页变得更智能的异步技术(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...

CentOs7.x安装部署SeaTunnelWeb遇到的坑

CentOs7.x安装部署SeaTunnelWeb遇到的坑 文章目录 1. 环境2. SeaTunnel安装部署2.1下载安装包2.2 设置环境变量2.3 安装连接器插件2.4 拷贝jar包到lib下2.5 启动命令2.6 执行官方client提交任务demo 3. SeaTunnel-Web安装部署3.1 下载安装包3.2 初始化数据库脚本或修改配置appl…...

Netlink通信

前言 Netlink 是 Linux 内核与用户空间进程之间进行通信的机制之一,一种特殊的进程间通信(IPC) 。它是一种全双工、异步的通信机制,允许内核与用户空间之间传递消息。Netlink 主要用于内核模块与用户空间程序之间进行通信,也被一些用户空间工具用于与内…...

Python打造简单而强大的聊天机器人:详解与实例代码

更多资料获取 📚 个人网站:ipengtao.com 聊天机器人在现代应用中扮演着重要的角色,能够与用户进行自然语言交互。本篇博客将带领读者通过Python,使用自然语言处理库构建一个简单而强大的聊天机器人。我们将深入讨论处理用户输入、…...

Unity 通过代码将一张大图切成多个小图的方法

在Unity 中要通过代码将一张贴图切割成多张小图&#xff0c;可以使用以下方法&#xff1a; /// <summary>/// 把一张图片切割成多张使用/// </summary>/// <param name"texture">原图</param>/// <param name"rows">切割的行…...

Spring Cloud Gateway请求路径修改指南:详解ServerWebExchange的完美解决方案及代码示例

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

AI+爬虫 爬虫宝

场景 在很多时候&#xff0c;有很多爬虫的需求&#xff0c;其实需求都是大同小异&#xff0c;不过是在某某网页上爬取某某东西。把这些东西给到业务。以往的做法是&#xff1a;每一个需求写一个c#或者python脚本或者应用&#xff0c;进行爬取&#xff0c;这相当的费时费力&…...

【matlab】绘制横状双组渐变柱状图

【matlab】绘制横状双组渐变柱状图...

如何下载知网论文、专利的PDF格式

知网的论文格式有其特有的格式&#xff1a;CAJ。将CAJ格式转化为Word或者PDF非常麻烦&#xff0c;且会出现乱码的情况&#xff0c;直接用知网官方的CAJ浏览器也不太方便。为此&#xff0c;困扰了许久。 其实&#xff0c;知网可以直接下载PDF格式&#xff0c;只需在浏览器上安装…...

SMARTFORMS打印问题

一、问题概述 项目中碰到EPSON针式打印机&#xff0c;SAP打印出来的三单合一&#xff0c;是想横向打印&#xff0c;结果不管怎么设置打印出来都是纵向的&#xff1b; 二、调整 1、首先调整SMARTFORMS的打印方向&#xff0c;使用T-CODE:SMARTFORMS&#xff0c;如下图&#xf…...

uniapp组件和周期的知识点以及怎么使用

UniApp是一个使用Vue.js开发跨平台应用的框架&#xff0c;它可以将代码编译成微信小程序、支付宝小程序、H5、App等多个平台的应用。在UniApp中&#xff0c;组件是构建应用界面的基本单位&#xff0c;而生命周期则是组件在实例化、挂载、更新和销毁过程中的一系列方法。 以下是…...

【Java JVM】实例对象的创建

当我们涉及 Java 编程时, 对象的创建是一个基础而关键的概念。在 Java 中, 一切皆为对象, 而对象的创建方式直接影响代码的结构和性能。 本博客将探讨一下 Java 实例对象的创建过程。 1 创建对象的方法有哪些 在 Java 中如果要创建一个对象, 有哪些方式呢? 运用 new 关键字创…...

sectigo多域名通配符证书

多域名通配符SSL证书是一种特殊的SSL证书&#xff0c;它综合了多域名SSL证书和通配符SSL证书的特点&#xff0c;可以同时保护多个泛域名以及它的主域名&#xff0c;适合域名多&#xff0c;子域名也比较多的单个或多个站点使用。今天就随SSL盾小编了解Sectigo旗下的DV多域名通配…...

vue 流光边框矩形圆形容器

实现流光边框一般是用渐变背景加动画实现&#xff0c;然后使用内部盒子遮挡内部空间&#xff0c;达到边框流光的效果 思路&#xff1a;背景渐变旋转动画 功能&#xff1a; 自定义渐变&#xff08;是否渐变<不渐变没有流光效果>&#xff0c;渐变颜色&#xff0c;渐变角…...

网页设计品牌/潍坊百度关键词优化

文章目录服务器端客户端运行结果小结服务器端 1、使用officegen来生成excel文件 先安装 npm install officegen var officegen require(officegen) var fs require(fs)const status [未开始, 进行中, 搁置, 完成] ... router.route(/download).post((req, res) > {var …...

官方网站下载qq音速/市场调研问卷调查怎么做

JAVA—出租车公司租车 样例 题目需求 1.一个人去租车公司租车&#xff0c;车分为轿车、客车、电动车&#xff0c;轿车品牌有宝马&#xff08;200&#xff09;、奔驰&#xff08;300&#xff09;、奥拓&#xff08;50&#xff09;、客车品牌五菱&#xff08;800&#xff09;、长…...

爱用建站平台/网络域名

给div&#xff1a;background:rgba(190,190,190,0.5);...

郑州小程序/厦门百度整站优化服务

国外的源访问很慢&#xff0c;可以用国内的源进行下载&#xff0c;这里以清华的源为例&#xff0c;命令如下&#xff1a; pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple 要安装的库的名称例如我要安装PyQt5&#xff0c;那么命令就是&#xff1a; pip3 install -…...

wordpress分页目录编辑/互动营销名词解释

首先&#xff0c; equality 等同&#xff0c; identity 恒等。&#xff0c; 两边值类型不同的时候&#xff0c;要先进行类型转换&#xff0c;再比较。&#xff0c;不做类型转换&#xff0c;类型不同的一定不等。下面分别说明&#xff1a;先说 &#xff0c;这个比较简单。下面的…...

猪八戒做网站要多少钱/百度问答平台入口

这篇文章转贴的原因是我老婆在操作ORACLE的 CLOB数据类型进行关联比较提示了 00932的错误, 比较LOB大对象应当使用dbms_lob.compare函数(下面文章有提到具体的使用).主要是用来存储大量数据的数据库字段&#xff0c;最大可以存储4G字节的非结构化数据。主要介绍字符类型和二进制…...