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一定保证指标粒度是原始表数据粒度,代码臃肿时可落子查询。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动手机截图,读取图片尺寸

这个代码的设计初衷是为了解决图片处理过程中的一些痛点。想象一下,我们都曾遇到过这样的情况:相机拍摄出来的照片、网络下载的图片,尺寸五花八门,大小不一。而我们又渴望将它们整理成一套拥有统一尺寸的图片,让它们更…

ChatGPT 调教指南:从 PDF 提取标题并保存

一、请使用python编写一段代码,使用pymupdf包从pdf中提取标题,保存标题名称和页数。 我没有加任何的答案提示,看看 GPT 如何反应。它应该是知道 PDF 没有任何语义信息,一切标题或者正文全是文本框。 好的,以下是使用py…

零基础Linux_9(进程)环境变量+进程地址空间+进程创建fork

目录 1. 环境变量 1.1 环境变量基本概念 1.2 环境变量PATH 1.3 环境变量HOME和SHELL 1.4 获取环境变量(main函数参数) 1.4.1 main函数第三个参数 1.4.2 设置普通变量和环境变量 1.4.3 main函数前两个参数 2. 进程地址空间 2.1 验证进程地址空…

PHP8的数据封装(数据隐藏)-PHP8知识详解

面向对象的特点之一就是封装性,也就是数据封装,也被称为数据隐藏。 php8通过限制访问权限来实现数据的封装性,这里用到了public、private、protected、static和final几个关键字。下面来介绍前3个。 1.、public(公共成员&#xf…

CSP-J第二轮试题-2021年-3题

文章目录 参考:总结 [CSP-J 2021] 网络连接题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 样例 #3样例输入 #3样例输出 #3 样例 #4样例输入 #4样例输出 #4 提示答案1答案2 现场真题注意事项 参考: https://www…

2022年全球一次能源消费量:石油消耗量持续增加达190.69百亿亿焦耳,亚太地区消费量居首位[图]

一次性能源是指从自然界取得未经改变或转变而直接利用的能源。如原煤、原油、天然气、水能、风能、太阳能、海洋能、潮汐能、地热能、天然铀矿等。一次性能源又分为可再生能源和不可再生能源,前者指能够重复产生的天然能源,包括太阳能、风能、潮汐能、地…

网络知识点之—PPPoE

本文章已收录至《网络》专栏,点进右上角专栏图标可访问本专栏 PPPoE(Point-to-Point Protocol Over Ethernet),指以太网上的点对点协议,是将点对点协议(PPP)封装在以太网(Ethernet&a…

机器学习的超参数 、训练集、归纳偏好

一、介绍 超参数(Hyperparameters)和验证集(Validation Set)是机器学习中重要的概念,用于调整模型和评估其性能。 超参数: 超参数是在机器学习模型训练过程中需要手动设置的参数,而不是从数据…

C/C++与汇编混合编程

1. C/C调用汇编 C/C想调用汇编代码必须要注意名称修饰的问题 名称修饰(name decoration): 一种标准的C/C编译技术, 通过添加字符来修改函数名, 添加的字符指明了每个函数参数的确切类型。主要是为了支持函数重载, 但对于汇编来说其问题在于, C/C编译器让链接器去找被修饰过的名…

K8S-EverNote同步

Node污点 释义看文档就好 https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/ 污点是Node的属性 容忍度是Pod的属性 用来标记各自特征的,通常协同工作。 举个例子, 一个Node的污点 kubectl taint nodes node1 key1v…

算法练习10——数组为空的最少操作次数

LeetCode 100032 使数组为空的最少操作次数 给你一个下标从 0 开始的正整数数组 nums 。 你可以对数组执行以下两种操作 任意次 : 从数组中选择 两个 值 相等 的元素,并将它们从数组中 删除 。 从数组中选择 三个 值 相等 的元素,并将它们从数…

cadence SPB17.4 S032 - 使用room来放置元件

文章目录 cadence SPB17.4 S032 - 使用room来放置元件概述笔记在orcad中设置子原理图的ROOM号码在空的Allegro工程中, 放入板框在allegro中建立room备注补充 - ROOM还得留着END cadence SPB17.4 S032 - 使用room来放置元件 概述 如果在allegro中直接手工或自动放置元件, 放好…

C++ —— 单机软件加入Licence许可权限流程(附详细流程图、详细代码已持续更新..)

单机版许可证简介 笼统的说:实现一个生成授权Lic文件应用程序(我们使用),生成的Lic文件给应用程序(客户使用)启动时读取一下对比加密后的字符串或自定义格式的密钥判断是否正确。 单机版许可证执行流程 第一级比对:发布的加密许可证文件,该加密许可证文件仅可用使用的软…

计算机网络各层设备

计算机网络通常被分为七层,每一层都有对应的设备。以下是各层设备的简要介绍: 物理层(Physical Layer):负责传输二进制数据位流的物理媒体和设备,例如网线、光纤、中继器、集线器等。 数据链路层&#xf…

LeNet网络复现

文章目录 1. LeNet历史背景1.1 早期神经网络的挑战1.2 LeNet的诞生背景 2. LeNet详细结构2.1 总览2.2 卷积层与其特点2.3 子采样层(池化层)2.4 全连接层2.5 输出层及激活函数 3. LeNet实战复现3.1 模型搭建model.py3.2 训练模型train.py3.3 测试模型test…

【网络协议】传输层协议

目录 传输层协议 1.传输层的两个协议 1.1TCP和UDP的应用场景 1.2传输层协议和应用层协议的关系 2.TCP和UDP的对比(重点) (1)无连接的UDP和面向连接的TCP (2)UDP和TCP对单播、多播和广播的支持情况 (3)UDP和TCP对应用层报文的处理 (4)UDP和TCP对数…

React实现多图片预览功能、预览图上下张切换(实战示例)

前言 在React项目中,展示和预览多张图片是一种常见的需求。本篇帖子将介绍如何使用React和antd库来实现这一功能,并探讨如何在预览模态框中切换到前一张或后一张图片。 背景 我们将以一个OCR图像列表展示的示例来演示代码的运用。假设我们有一个OCR系…

Linux系统编程系列之进程间通信-信号量组

一、什么是信号量组 信号量组是信号量的一种, 是system-V三种IPC对象之一,是进程间通信的一种方式。 二、信号量组的特性 信号量组不是用来传输数据的,而是作为“旗语”,用来协调各进程或者线程工作的。信号量组可以一次性在其内…

【LeetCode】滑动窗口妙解无重复字符的最长子串

Problem: 3. 无重复字符的最长子串 文章目录 思路算法原理分析暴力枚举 哈希表滑动窗口 复杂度Code 思路 首先我们来分析一下本题的思路 如果读者有看过 长度最小的子数组 的话就可以清楚这个子串其实和子数组是一个道理,都是 连续的一段区间但是呢它们本质上还是存…

应用架构的演进:亚马逊的微服务实践

当你在亚马逊上购物时,或许不会想到,你看到的这个购物网站,其背后技术架构经历了什么样的变迁与升级。 还记得上世纪 90 年代,那个只卖书的网上书店吗?那时的亚马逊,不过是一个架构简单的网站,所有的功能都堆积在一个庞大的软件堡垒里。随着更多业务的增加、更新和迭代,这个软…