Hive 常见数据倾斜场景及解决方案(Map\Join\Reduce端)
目录
- MapReduce流程简述
- a) Map倾斜
- b) Join倾斜
- c) Reduce倾斜
首先回顾一下MapReduce的流程
MapReduce流程简述
输入分片: MapReduce 作业开始时,输入数据被分割成多个分片,每个分片大小一般在 16MB 到 128MB 之间。这些分片会被分配给不同的 Map 任务进行处理。
Map 阶段: Map 阶段的任务是处理输入分片,并为每个分片生成一个或多个键值对(key/value pair)。Map 函数由用户编写,以处理具体的业务逻辑。
Shuffle 阶段:在 Map 阶段完成后,系统会自动进行 Shuffle 阶段。在这个阶段,系统会根据 Map 阶段生成的键值对中的键(key),将值(value)进行重新排序和分组,同一个键对应的值会被组合在一起。
Reduce 阶段:Shuffle 阶段后是 Reduce 阶段。在此阶段,Reduce 函数(也由用户编写)会处理 Shuffle 阶段生成的每个键和对应的值的集合,并生成一组输出结果。
输出:最后,MapReduce 作业的输出会被写入到文件系统中,一般是分布式文件系统,如 Hadoop 的 HDFS。这样,输出结果就可以被其他 MapReduce 作业或其他系统使用。
Map主要功能从磁盘读数据到内存。两个主要过程:1)每个输入分片让一个instance处理,默认256MB,输出暂存环形内存缓冲区;2)写磁盘之前,根据reduce
instance数量分区,也会做部分聚合工作,减少输入reduce的数据量。
a) Map倾斜
i) 上游表文件的大小不均匀,并且小文件特别多。可以上游合并小文件,或调节参数:“set odps.sql. mapper.merge.limit.size=64”用于调节Map Instance 的个数;“set odps.sql.mapper.split.size=256” 用于调节单个Map Instance 读取的小文件个数。
ii) 某些Map Instance读取文件的某个值过多,主要是指 Count Distinct 操作。可以设置 “distribute by rand()”将 Map 端分发后的数据重新按照随机值再进行分发。
Join参与整个Map和Reduce阶段。
b) Join倾斜
i) Join的某路输入比较小,可以采用 MapJoin,避免分发引起长尾。
ii) Join 的每路输入都较大,且长尾是空值导致的,可以将空值处理成随机值,避免聚集。
iii) Join 的每路输入都较大,且长尾是热点值导致的,可以对热点值 和非热点值分别进行处理,再合并数据。
Reduce段负责对Map梳理后的有序键值对聚合操作,长尾原因是key数据分布不均匀
c) Reduce倾斜
i) 同一个表按维度对不同列count distinct,使Map端数据膨胀;
ii) Map直接聚合时Key不均匀,导致Reduce端长尾:对热点key单独处理;
iii) 动态分区过多使小文件过多,数据分发多次:动态分区可将符合不同条件的数据放不同分区,避免多次写表,这可能产生大量小文件,可引入额外一级reduce task,相同目标分区交友同一个reduce instance写入。
iv) 多个Distinct 同时出现在一段代码中,数据多次分发膨胀 N 倍,还会把长尾现象放大 N 倍。应避免在同一段SQL代码中多次使用Distinct,可以将Distinct移到子查询中或者使用其他去重方式,例如使用GROUP BY。注意不同表join一定保证指标粒度是原始表数据粒度,代码臃肿时可落子查询。
相关文章:
Hive 常见数据倾斜场景及解决方案(Map\Join\Reduce端)
目录 MapReduce流程简述a) Map倾斜b) Join倾斜c) Reduce倾斜 首先回顾一下MapReduce的流程 MapReduce流程简述 输入分片: MapReduce 作业开始时,输入数据被分割成多个分片,每个分片大小一般在 16MB 到 128MB 之间。这些分片会被分配给不同的…...
C++中的四种强制类型转换符详解
前 言 C 既支持 C 风格的类型转换,又有自己风格的类型转换。C 风格的转换格式很简单,但是有不少缺点: 转换太过随意,可以在任意类型之间转换。你可以把一个指向 const 对象的指针转换成指向非 const 对象的指针,把一…...
Windows电脑多开器的优缺点对比
Windows电脑多开器是一种能够让用户同时运行多个应用程序、游戏或者网页的软件工具。它的作用在于让用户能够更加高效地工作、学习或者娱乐。但是,这种软件也存在一些优劣势的对比。 优点: 提升工作效率。多开器可以让用户同时打开多个应用程序或者网页…...

Java笔记六(面向对象:类与对象)
面向对象编程的本质:以类的方式组织代码,以对象的组织(封装)数据 抽象 三大特征:封装 继承 多态 从认识角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽…...

Git使用【中】
欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析3 目录 👉🏻分支管理分支概念git branch(查看/删除分…...
Greenplum7一键安装
2023年9月底,Greenplum 发布了7.0.0版本,并于2023年10月03日开放了安装部署说明文档,现在快速尝鲜版的docker一键部署方式如下: mkdir /data/gpdb docker run -d --name greenplum -p 15432:5432 -v /data/gpdb:/data inrgihc/g…...

Springboo整合Sentinel
Springboo整合Sentinel 1.启动Sentinel java -jar sentinel-dashboard-1.8.6.jar2.访问localhost:8080到Sentinel管理界面(默认账号和密码都是sentinel) 3.引入依赖(注意版本对应) <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spr…...

python爬取csdn个人首页中的所有封面
#爬取csdn个人首页中的所有封面 import requests import json import reurlhttps://blog.csdn.net/community/home-api/v1/get-business-list? headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safar…...
EasyHttp - 网络请求,如斯优雅
官网 项目地址:Github博客地址:网络请求,如斯优雅 OkHttp 另外对 OkHttp 原理感兴趣的同学推荐你看以下源码分析文章 OkHttp 精讲:拦截器执行原理OkHttp 精讲:RetryAndFollowUpInterceptorOkHttp 精讲:…...

【Java】Stream的基本使用
Stream特点 Stream的一系列操作组成了Stream的流水线, Stream流水线包含: 数据源: 这里的数据源可能是集合/数组, 可能是生成器, 甚至可能是IO通道(Files.lines)零个或多个中间操作: 中间操作会导致流之间的转化, 如filter(Predicate)一个终端操作: 终端操作会产生最终所需要的…...

idea Springboot 高校科研资源共享系统VS开发mysql数据库web结构java编程计算机网页源码maven项目
一、源码特点 springboot 高校科研资源共享系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发), 系统具有完整的源代码和数据…...

机器学习算法基础--K-means应用实战--图像分割
目录 1.项目内容介绍 2.项目关键代码 3.项目效果展示 1.项目内容介绍 本项目是将一张图片进行k-means分类,根据色彩k进行分类,最后比较和原图的效果。 题目还是比较简单的,我们只要通过k-means聚类,一类就是一种色彩得出聚类之…...

CSS学习小结
css的两种使用方式: ①内嵌样式表 ②导入外部样式表(实际开发常用)<link href"...." rel"stylesheet"/> 选择器: ①标签选择器:通过标签种类决定 ②类选择器:class"..…...

数据挖掘实验(一)数据规范化【最小-最大规范化、零-均值规范化、小数定标规范化】
一、数据规范化的原理 数据规范化处理是数据挖掘的一项基础工作。不同的属性变量往往具有不同的取值范围,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果。为了消除指标之间由于取值范围带来的差异,需要进行标准化处理。将数据…...

C++17中std::filesystem::directory_entry的使用
C17引入了std::filesystem库(文件系统库, filesystem library)。这里整理下std::filesystem::directory_entry的使用。 std::filesystem::directory_entry,目录项,获取文件属性。此directory_entry类主要用法包括: (1).构造函数、…...

C/C++跨平台构建工具CMake入门
文章目录 1.概述2.环境准备2.1 安装编译工具2.2 安装CMake 3.编译一个示例程序总结 1.概述 本人一直对OpenGL的3d渲染很感兴趣,但是苦于自己一直是Android开发,没有机会接触这方面的知识。就在最近吗,机会来了,以前一个做3D渲染的…...

【CFD小工坊】浅水方程的离散及求解方法
【CFD小工坊】浅水方程的离散及求解方法 前言基于有限体积法的方程离散界面通量与源项计算干-湿网格的处理数值离散的稳定性条件参考文献 前言 我们模型的控制方程,即浅水方程组的表达式如下: ∂ U ∂ t ∂ E ( U ) ∂ x ∂ G ( U ) ∂ y S ( U ) U…...
第十四章 类和对象——C++对象模型和this指针
一、成员变量和成员函数分开存储 在C中,类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 class Person {public:Person() {mA 0;}//非静态成员变量占对象空间int mA;//静态成员变量不占对象空间static int mB; //函数也不占对象空间&#…...

计算机竞赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测
文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…...

java web+Mysql e-life智能生活小区物业管理系统
本项目为本人自己书写,主要服务小区业主和管理人员。 e-life智能生活小区涉及多个方面的智能化和便利化服务: 1. 用户模块:包含基本的登入登出操作,查看个人信息中用户可以查看 自己的个人资料但不可以修改个人信息。 a) 用户…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...