大数据面试之路 (一) 数据倾斜
记录大数据面试历程
数据倾斜
大数据岗位 ,数据倾斜面试必问的一个问题。
一、数据倾斜的表现与原因
-
表现
-
某个或某几个Task执行时间过长,其他Task快速完成。
-
Spark/MapReduce作业卡在某个阶段(如
reduce
阶段),日志显示少数Task处理大量数据。 -
资源利用率不均衡(如CPU、内存集中在某些节点)。
-
-
常见场景
-
Key分布不均:如某些Key对应的数据量极大(如用户ID为空的记录、热点事件)。
-
数据分区策略不合理:Hash分区时Key冲突,或Range分区时范围划分不均衡。
-
业务逻辑导致倾斜:如大表Join小表时小表广播失败,或笛卡尔积操作。
-
二、检测数据倾斜的方法
-
日志分析
-
查看任务执行时间分布(如Spark UI的Stage详情)。
-
检查Shuffle读写数据量(如
Shuffle Read/Write Records
)。
-
-
抽样统计
-
对Key进行采样,统计Top N高频Key(如用
countByKey
或sample
)。
-
-
监控工具
-
使用Ganglia、Prometheus等监控节点资源负载。
-
三、通用解决方案
1. 预处理:过滤或隔离倾斜数据
-
过滤异常Key:直接删除无意义的倾斜Key(如空值、测试数据)。
-
分离热点数据:将高频Key单独处理,与非倾斜数据合并结果。
-- 示例:将热点用户的行为日志单独处理
SELECT * FROM logs WHERE user_id = 'hot_user' -- 单独处理
UNION ALL
SELECT * FROM logs WHERE user_id != 'hot_user' -- 正常处理
2. 调整Key分布
增加随机前缀(Salting):对Key添加随机数,分散数据到不同分区。
# Spark示例:对倾斜Key添加随机前缀
skewed_rdd = rdd.map(lambda x: (x[0] + "_" + str(random.randint(0, 9)), x[1]))
两阶段聚合:
-
对Key加随机前缀,局部聚合;
-
去掉前缀,全局聚合。
3. 优化Shuffle过程
-
提高并行度:增加分区数(如
spark.sql.shuffle.partitions=2000
)。 -
使用Combiner:在Map端预聚合(如ReduceByKey替代GroupByKey)。
-
广播小表:在Join时,将小表广播到所有Executor,避免Shuffle。
4. 使用特定框架优化
-
Spark AQE(Adaptive Query Execution):
Spark 3.0+ 支持动态合并倾斜分区(spark.sql.adaptive.skewJoin.enabled=true
)。 -
Flink KeyBy前加盐:类似Spark的随机前缀方法。
-
Hive参数调优:
set hive.map.aggr=true;
(Map端聚合)
set hive.groupby.skewindata=true;
(生成两个MR Job分散负载)。
四、场景化解决方案
场景1:Join操作倾斜
方案1:将小表广播
-- Spark SQL广播Join
SELECT /*+ BROADCAST(small_table) */ *
FROM big_table JOIN small_table ON big_table.key = small_table.key;
方案2:拆分倾斜Key
若大表和大表Join且某些Key倾斜:
-
提取倾斜Key单独Join;
-
非倾斜Key正常Join;
-
合并结果
场景2:Group By/Aggregation倾斜
方案:两阶段聚合(加盐与去盐
-- 第一阶段:对Key加随机后缀,局部聚合
SELECT key || '_' || suffix AS salted_key, SUM(value)
FROM table
GROUP BY key || '_' || suffix;-- 第二阶段:去除后缀,全局聚合
SELECT REPLACE(salted_key, '_*', '') AS key, SUM(sum_value)
FROM temp_table
GROUP BY REPLACE(salted_key, '_*', '');
场景3:数据源倾斜
方案:调整文件分区
-
写入数据时使用合理的分区策略(如按时间+哈希混合分区)。
-
对小文件合并,对大文件拆分。
五、预防数据倾斜的设计原则
-
合理选择分区键:避免选择基数低或分布不均的字段。
-
数据预分析:ETL阶段提前统计Key分布,识别潜在倾斜。
-
动态调整:利用AQE(自适应查询执行)等自动化优化机制。
面试回答示例
问题:如何处理Spark作业中的数据倾斜?
回答:
-
定位倾斜:通过Spark UI查看Stage中Task的数据量分布,找到倾斜的Key。
-
过滤无效数据:如删除空Key或异常值。
-
调整Key分布:对倾斜Key加随机前缀,分两阶段聚合。
-
优化Shuffle:提高
shuffle.partitions
,使用广播Join。 -
框架特性:开启Spark AQE,自动合并倾斜分区。
-
举例:在最近的项目中,某用户行为日志的UserID存在热点,通过加盐将原本集中在1个分区的数据分散到10个分区,作业时间从2小时缩短至15分钟。
数据倾斜调优
更多信息请参 阿里云帮助中心
数据倾斜调优_云原生大数据计算服务 MaxCompute(MaxCompute)-阿里云帮助中心
相关文章:
大数据面试之路 (一) 数据倾斜
记录大数据面试历程 数据倾斜 大数据岗位 ,数据倾斜面试必问的一个问题。 一、数据倾斜的表现与原因 表现 某个或某几个Task执行时间过长,其他Task快速完成。 Spark/MapReduce作业卡在某个阶段(如reduce阶段),日志显…...
文件上传漏洞 upload-labs靶场
(这个没删就是还没做完 ; ω ; ) 目录 Pass-01 前端绕过 关卡分析 绕过:Burpsuite抓包修改或页面禁用js Pass-02 服务器端检测–IMME类型 关卡分析 Content-type 绕过:抓包修改文件的content-type Pass-03 黑名单绕过 关…...
「 DelegateUI 」Ant-d 风格的 Qt Qml UI 套件
写在前面:关于为什么要写一套新的UI框架 一方面,Qt Qml 生态中缺乏一套既遵循现代设计规范(自带的功能少且丑,懂得都懂),又能深度整合 Qt 生态的开源组件库。 另一方面,Qt Qml 中也有一些其他方案,例如 FluentUI Qml…...
数字人分身开发指南:从概念到实战
一、什么是数字人分身? 想象一下,在电脑或手机屏幕里,一个能跟你聊天、回答问题,甚至还能做表情的虚拟角色。这就是数字人分身,它用上了人工智能技术,让机器也能像人一样交流。无论是在线客服、网络主播还…...
Java小白-管理项目工具Maven(2)初识Maven
一、Maven安装 ①安装jdk1.8或以上版本 ②下载Maven(此为3.6.0):地址:Download Apache Maven – Maven 下载地址:Index of /dist/maven/maven-3/3.6.0/binaries ③安装Maven到无中文路径即可 bin:含…...
【附JS、Python、C++题解】Leetcode 面试150题(8)
一、题目 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。你不能倾斜…...
什么是向量数据库向量搜索?
向量数据库 专为高效存储与检索高维向量设计,支持语义搜索、推荐系统等AI场景,如文本/图像嵌入的相似性匹配。 ChromaDB 轻量级开源向量数据库,优势在于易用性(快速部署、简洁API)和小规模场景(本地开发、…...
【WRF-Urban】使用 LCZ 替换 WRF 运行中的 LUCC 数据
使用 LCZ 替换 WRF 运行中的 LUCC 数据 WRF-UCM中的城市类型LCZ的背景介绍完整步骤总结1. 获取 LCZ 数据2. 获取 WRF 运行所需的 LUCC 数据3. 使用 w2w 替换 WRF 的 LUCC 数据4. 运行 WRF 预处理(WPS & REAL)5. 运行 WRF 并优化城市参数化Q1:使用 LCZ 替换 WRF 运行中的…...
centos 7 安装apache服务
四步骤 解包 使用tar -zxvf 对.tar.gz 进行解压 使用tar -jxvf 对.tar.bz2 进行解压 rpm命令使用集合 rpm -qa 查询系统已安装的软件包 rpm -ql查看指定软件包存放的位置 rpm -qi查看指定软件包的属性 rpm -qf查看指定文件或目录是由哪个软件包所安装的 rpm -qpi查看指…...
2025各省市建筑产业和工程建设计划安排
1. 前言 十四届全国人大三次会议3月5日上午9时在人民大会堂开幕,国务院总理李强作政府工作报告。 《2025年政府工作报告》(以下简称 “报告”)作为统筹国家经济、战略布局与社会发展的蓝图,与建筑业息息相关,为今后的…...
广告营销,会被AI重构吗?
DeepSeek设计,即梦AI绘图,剪映成片。 DeepSeek的热度还在高开疯走。 用户对于各个场景下DS应用的探索也还在持续,各种DS的模式被挖掘出来,超级个体们开始给手下的大模型团队进行分工,实践出各种场景下最佳的排列组合方…...
01 音视频知识学习(视频)
图像基础概念 ◼像素:像素是一个图片的基本单位,pix是英语单词picture的简写,加上英 语单词“元素element”,就得到了“pixel”,简称px,所以“像素”有“图像元素” 之意。 ◼ 分辨率:是指图像…...
深入探究 Ryu REST API
Ryu 4.34 REST API 详细接口说明与示例 Ryu 4.34 的 REST API 提供了对 SDN 网络的核心管理功能,涵盖交换机、流表、端口、拓扑和 QoS 等操作。以下是详细的接口分类、功能说明及 Python 示例代码。 1. 交换机管理 1.1 获取所有交换机 DPID 端点: GET /stats/swi…...
不同AI生成的PHP版雪花算法
OpenAI <?php /*** Snowflake 雪花算法生成器* 生成的 64 位 ID 结构:* 1 位 保留位(始终为0,防止负数)* 41 位 时间戳(毫秒级,当前时间减去自定义纪元)* 5 位 数据中心ID* 5 …...
texstudio: 编辑器显示行号+给PDF增加行号
texstudio在编辑器部分增加行号: texstudio默认在编辑器部分不显示行号,如下图: 要实现以下的在编辑部分增加行号: 执行如下操作: 选项-->设置TexStudio-->编辑器-->显示行号-->所有行号选择好后&…...
强化学习基础-马尔可夫决策过程与贝尔曼方程
马尔可夫决策过程 在老虎机问题中,无论智能代理采取什么行动,之后要解决的问题都是一样的。也就是寻找最好的老虎机。但现实生活中的问题是不同的。例如,在围棋游戏中,智能代理落子后,棋盘上的棋子排列会发生变化&…...
爬虫的精准识别:基于 User-Agent 的正则实现
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
Scala的初步使用
目录 1. Scala简介2. Scala编写的Hello World2.1 pom.xml中依赖和插件的配置2.2 安装Scala2.12.172.3 安装code-server插件2.4 helloworld.scala2.5 helloworld2.scala2.6 java调用scala object 3. Scala调用Java3.1 例子13.2 例子2 参考 1. Scala简介 Scala是一门多范式的编程…...
【Json RPC框架】框架介绍与环境搭建(Ubuntu 22.04)
🎁个人主页:我们的五年 🔍系列专栏:Json RPC框架 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 JSon RPC框架系列文章Json RPC框架_我们的五年的博…...
python读取word文档 | AI应用开发
python读取word文档 | AI应用开发 RAG中python读取word文档 RAG系统中构建知识库流程中重要的一个步骤是读取外挂的知识文档,为word是其中比较常见的文件。 另一个值得注意的是,RAG在读取文档后需要对文档进行分割,而良好的分割需要有一定结…...
20、组件懒加载
组件懒加载,也被称为异步组件加载,是一种在 Vue 项目中提升性能的重要技术手段。下面从概念、实现原理、使用场景、实现方式几个方面详细介绍: 概念 在传统的 Vue 项目里,当应用启动时,所有的组件代码都会被一次性加…...
打造智能钉钉机器人:借助智谱GLM-4-Flash实现高效智能回复(文末附源码)
文章目录 前言一、准备工作(一)钉钉机器人(二)智谱 GLM-4-Flash(三)内网穿透工具 cpolar(四)需要准备的工具和环境 二、钉钉机器人的创建与配置步骤1:创建钉钉机器人步骤…...
【故障处理系列--docker卷的挂载】
一位伙伴需求是把容器的目录映射到宿主机且容器目录的内容不被宿主机的空白目录覆盖。我的第一反应是-v 卷的映射,参数是对的,但是用法是错的 1、容器卷的挂载方式 容器把目录映射到宿主机创建volume卷,然后把容器的目录和volume卷绑定 区别…...
兴达易控modbusTCP转profinet接防撞雷达测试
modbusTCP转profinet接防撞雷达测试 随着工业自动化程度的不断提高,现场设备之间的通信需求日益增长。ModbusTCP作为一种广泛应用的工业通信协议,因其简单、可靠的特点,被广泛应用于各种自动化设备中。而Profinet作为工业以太网的一种&#…...
Acknowledgment.nack方法重试消费kafka消息异常
文章目录 问题示例异常 原因nack方法Acknowledgment接口实现类:ConsumerAcknowledgment实现类:ConsumerBatchAcknowledgment 解决方案1 批量消费指定index示例 2 单条消费示例 问题 使用BatchAcknowledgingMessageListener 批量消费Kafka消息࿰…...
通过动态获取后端数据判断输入的值打小
eval() 函数在 JavaScript 中是一个非常强大的函数 【1】计算简单公式 很多时候如果需要动态的提供计算的公式,需要写一大段的公式计算逻辑去兼容,可能耗费大量的开发成本。为了快速了解 eval 的用法,直接 ① 打开浏览器;② F1…...
乐维网管平台核心功能解析(一)——告警关联知识
在数字化转型浪潮中,企业IT系统规模呈指数级增长,传统的"人工经验"运维模式已难以应对海量告警处理需求。某银行数据中心曾统计,其日均告警量突破10万条,关键故障的平均定位时间长达3.5小时,直接导致年损失超…...
数据结构_单链表
今天我们要开启链表的学习 🖋️🖋️🖋️ 学了顺序表我们可以知道: 🎈链表其实就是争对顺序表的缺点来设计的,补足的就是顺序表的缺点 🎈链表在物理上是上一个节点存放的下一个节点的地址 链表 …...
b站视频下载工具软件怎么下载
自行配置FFMPEG环境 请优先选择批量下载,会自处理视频和音频文件。 如果要下载更高质量请登陆。 没有配置FFMPEG下载后会有报错提示,视频音频文件无法合并生成mp4文件 更新批量下载标题,只取视频原标题,B站反爬机制登陆后下载多了…...
如何实现pinia的持久化存储
在 Vue 3 项目中使用 Pinia 进行状态管理时,若要实现持久化存储,可借助 pinia-plugin-persistedstate 插件,该插件能让 Pinia 存储的状态在页面刷新或关闭后依然保留。下面为你详细介绍实现步骤: 1. 安装插件 首先,在…...
webpack介绍
entry与output 入口是 Webpack 开始构建依赖图的起点,Webpack 会从入口文件开始,递归地分析项目的依赖图。输出指定 Webpack 打包后的文件存放位置和文件名。 const path require("path");module.exports {entry: "./src/index.js&qu…...
使用Mermaid语法绘制的C语言程序从Linux移植到Windows的流程图
以下是使用Mermaid语法绘制的C语言程序从Linux移植到Windows的流程图: graph TDA[开始移植] --> B[代码兼容性检查]B --> C[检查系统调用差异\nfork/exec -> CreateProcess]B --> D[检查文件路径格式\n/ vs \\]B --> E[检查依赖库兼容性\nPOSIX vs …...
蓝桥杯嵌入式组第七届省赛题目解析+STM32G431RBT6实现源码
文章目录 1.题目解析1.1 分而治之,藕断丝连1.2 模块化思维导图1.3 模块解析1.3.1 KEY模块1.3.2 ADC模块1.3.3 IIC模块1.3.4 UART模块1.3.5 LCD模块1.3.6 LED模块1.3.7 TIM模块 2.源码3.第七届题目 前言:STM32G431RBT6实现嵌入式组第七届题目解析源码&…...
【spring bean的生命周期】
以下是使用 Mermaid 绘制的 Spring Bean 生命周期流程图: 流程说明 实例化:Spring 容器创建 Bean 的实例。属性赋值:Spring 为 Bean 的属性注入值(依赖注入)。BeanPostProcessor.postProcessBeforeInitialization&…...
数据类设计_图片类设计之3_半规则图类设计(前端架构基础)
前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇讨论半规则图类型的设计 半规则图的定义 什么是半规则图?笔者看见了一些似乎规则又不是太规则的图形,例如带圆角的矩阵,在页面上找一个圆角框 为了…...
【leetcode hot 100 138】随机链表的复制
解决一:回溯 哈希表 本题要求我们对一个特殊的链表进行深拷贝。如果是普通链表,我们可以直接按照遍历的顺序创建链表节点。而本题中因为随机指针的存在,当我们拷贝节点时,「当前节点的随机指针指向的节点」可能还没创建…...
如何安全处置旧设备?
每年,数百万台旧设备因老化、故障或被新产品取代而被丢弃,这些设备上存储的数据可能带来安全风险。 如果设备没有被正确删除数据,这些数据往往仍可被恢复。因此,安全处置旧设备至关重要。 旧设备可能包含的敏感数据 旧设备中可能…...
Windows 万兴恢复专家 Wondershare Recoverit-v13.5.7.9-[电脑数据恢复工具]
Windows 万兴恢复专家Wondershare_Recoverit 链接:https://pan.xunlei.com/s/VOL3z608vzAj_IYTvH-F1q7kA1?pwdiu89# 1. 打开Setup.exe进行安装,安装完不要打开软件,记住安装目录 2. 将"Crack"文件夹内的所有文件复制到安装目录 …...
eLection: 1靶场渗透测试
eLection: 1 来自 <eLection: 1 ~ VulnHub> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.196 3,对靶机进行端口服…...
类与对象(下)
1 . 再谈构造函数 1.1构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class B { public:B(int a0){_a a;} private:int _a; };虽然上述构造函数调用之后,对象中已经有了一个初始值…...
数字人源头技术搭建模型--v10追踪推理逻辑
数字人源头技术搭建模型--v10追踪推理逻辑 #数字人# #数字人技术源头saas开发# 数字人源头技术搭建模型V10的追踪推理逻辑通常涉及以下几个关键方面: 数据收集与预处理 - 多模态数据采集:收集图像、音频等多模态数据。例如通过摄像头采集人物的面部…...
基于Asp.net的高校迎新管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
商业智能BI的未来,如何看待AI+BI这种模式?
昨天在和一位朋友线上聊天的时候,提了一个问题,你是如何看待AI(人工智能)BI(商业智能)这种模式和方向的,我大概来说一下我个人的看法。 以我在商业智能BI项目中接触到的行业和企业,…...
C++ 编程指南27 - 始终将 mutex 与它所保护的数据一起定义,并尽可能使用 synchronized_value<T>
一:概述 在多线程编程中,互斥锁(std::mutex)的作用是保护共享数据的访问。但如果 mutex 和它保护的数据分开定义,可能会导致以下问题: 锁的使用不明显:程序员可能会忘记获取 mutex 就访问数据&…...
选择 DotNetBrowser 还是 EO.WebBrowser
您是否正在为 .NET 应用寻找 Web 视图控件?如果是的话,那您真是太幸运了!.NET 生态系统提供了丰富的选择。既有开源和专有的免费 Web 视图控件,也有许多企业广泛选择的商业 Web 视图控件。 在这篇博客文章中,我们将对…...
ngin配置内网服务-具体案例【天地图】
ngin配置内网服务-具体案例【天地图】 描述需求整体网络架构1. 政务内网服务器(10.10.10.70)2. 网闸(10.10.10.240:8088)3. 跳板机(10.10.20.70:9109)4. 天地图服务 具体步骤第一步:配置跳板机&…...
【网络】poll 与epoll(原理、工作模式LT、ET)
文章目录 1. poll2. epoll3. epoll原理4. epoll工作模式4.1 水平模式LT4.2 边缘模式ET 在前面用的select中,它的使用方式非常麻烦,而且能支持的文件描诉符太少了。 下面来介绍一下更加方便、高效的方式: 1. poll poll函数接口: include <…...
DeepIn Wps 字体缺失问题
系统缺失字体 Symbol 、Wingdings 、Wingdings2、Wingdings3、MT—extra 字体问题 问了下DeepSeek 在应用商店安装或者在windows 里面找 装了一个GB-18030 还是不行 在windows里面复制了缺失的字体 将字体复制到DeepIn 的字体目录(Ubuntu 应该也是这个目录&am…...
Spring有哪些缺点?
大家好,我是锋哥。今天分享关于【Spring有哪些缺点?】面试题。希望对大家有帮助; Spring有哪些缺点? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring是一个非常流行的Java框架,提供了丰富的功能和灵活的配置选项…...
使用Dockerfile打包java项目生成镜像部署到Linux_java项目打docker镜像的dockerfile
比起容器、镜像来说,Dockerfile 非常普通,它就是一个纯文本,里面记录了一系列的构建指令,比如选择基础镜像、拷贝文件、运行脚本等等,每个指令都会生成一个 Layer,而 Docker 顺序执行这个文件里的所有步骤&…...