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

【详解】Spark数据倾斜问题由基础到深入详解-完美理解-费元星

数据倾斜定义:顾名思义,就是大量相似或相同数据聚集在一个块的节点里,导致计算和资源分配不均导致的计算缓慢(长尾)问题。

数据倾斜原因:

count(distinct field)

group by 

NULL 空值

Shuffle (概率最高、发生最普遍的数据倾斜问题,本文重点讲述这个)

###################################################

先说解决方案:

1.相同值打散

各个论坛、博文写的最多的一种,最好理解的,对于NULL、空字符串、等可以找到的值,加rand打散。

concat_ws('_',field,rand())
重点关注 concat和 concat_ws 的区别是什么,面试和开发中的坑 经常遇见。

2.全局打散

主要解决的场景是大表和大表进行关联Join,注意如果是小表的话,直接mapjoin 采用广播即可解决。

大表和大表全局打散的思路:就是对左表(假设左表键倾斜)进行rand打散,本例举例10倍(注意这里还有优化空间,就是方法三),对右表进行explode,行转列,膨胀10倍。代码实操:

3.局部打散

局部打散主要解决超大的两张进行关联,在公司某搜索场景下,A、B表为不固定倾斜键,百亿和十亿的数据计算,为提升性能,特封装此方法。查找倾斜键,并只对倾斜键进行膨胀,如果膨胀10倍,注意右表是11倍的行转列。

# 伪代码:不理解可以再提问
select A.window_nums,
R.uid_concat
from (select case when replierUid ='0' or replierUid is null then rand()when window_nums > 100000  then concat_ws('_',replierUid,cast(ceiling(rand() * 10) as int))from(select row_number() over(partition by if(replierUid ='0',rand(),replierUid) order by aid) as window_numsfrom table_a) A1
) A left outer join(select *,concat_ws('_',uid, rand_num) as uid_concatfrom R lateral view explode(getGenergeCode(10)) tmp_tbl as rand_numunion allselect *,null,concat_ws('_',uid) as uid_concatfrom R
) R ON (A.touid_concat =R.uid_concat)
  /*** 输入* @author :费元星* @param key 输入数值* @return 返回容积为数值大小,步长为1的数组* @Demo : spark.udf.register("getGenergeCode", DataCenterUtils.getGenergeCode _)*/def getGenergeCode(key: Int): Array[Int] = {return scala.Array.range(1, key + 1, 1)}def main(args: Array[String]): Unit = {for (x <- getGenergeCode(10)) {print(" " + x)}println()}/** spark.udf.register("getGenergeCode", DataCenterUtils.getGenergeCode _) */

4.在局部打散基础上,可以采用局部多段打散,目前生产环境中还未遇到,感兴趣的网友可以试试这个思路。

5.一顿操作猛如虎,有没有更牛的解决方案,答案有:采用Spark Dce,百度和英特尔联合开发的基于硬件的shuffle解决方案,和负责人在内部分享会上交流过,形成一个共同的结论,如果能在集群底层将各种问题封装好,不暴露给使用用户RD是最佳的方案。

6.当然除此之外,开源也有一些解决方案,AQE等,后面有时间可以再出一篇AQE源码详解,也有一些没解决很好的问题,例如倾斜键识别。

相关文章:

【详解】Spark数据倾斜问题由基础到深入详解-完美理解-费元星

数据倾斜定义&#xff1a;顾名思义&#xff0c;就是大量相似或相同数据聚集在一个块的节点里&#xff0c;导致计算和资源分配不均导致的计算缓慢&#xff08;长尾&#xff09;问题。 数据倾斜原因&#xff1a; count(distinct field) group by NULL 空值 Shuffle (概率最…...

xss漏洞后端进行html消毒

import org.jsoup.Jsoup;public static String sanitizeHtml(String input) {// 使用 Jsoup 消毒 HTMLreturn Jsoup.clean(input, Safelist.relaxed());}public static void main(String[] args) {String userInput "<p><script>alert(1)</script>Safe…...

[论文精读]利用大语言模型对扩散模型进行自我修正

本博客是一篇最新论文的精读&#xff0c;论文为UC伯克利大学相关研究者新近(2023.11.27)在arxiv上上传的《Self-correcting LLM-controlled Diffusion Models》 。 内容提要: 现有的基于扩散的文本到图像生成模型在生成与复杂提示精确对齐的图像时仍然存在困难,尤其是需要数值和…...

CTF特训日记day(4-6)

来复现一下2022QWB决赛的RDP题目 这两天腰疼去了趟医院 题目要求我们攻击XRDP程序&#xff0c;从而达到本地提权的效果。 首先观察XRDP程序的版本信息 rootRDP:/home/rdp/Desktop# xrdp-sesman -version xrdp-sesman 0.9.18The xrdp session managerCopyright (C) 2004-2020…...

【深度学习笔记】09 权重衰减

09 权重衰减 范数和权重衰减利用高维线性回归实现权重衰减初始化模型参数定义 L 2 L_2 L2​范数惩罚定义训练代码实现忽略正则化直接训练使用权重衰减 权重衰减的简洁实现 范数和权重衰减 在训练参数化机器学习模型时&#xff0c;权重衰减&#xff08;decay weight&#xff09…...

三大兼容 | 人大金仓兼容+优化MySQL用户变量特性

目前&#xff0c;KingbaseES对MySQL的兼容性&#xff0c;已从功能兼容阶段过渡到强性能兼容、生态全面兼容阶段&#xff0c;针对客户常常遇到的用户变量问题&#xff0c;KingbaseES在兼容MySQL用户变量功能的基础上&#xff0c;优化了MySQL用户变量的一些原生问题&#xff0c;使…...

Git介绍与安装使用

目录 1.Git初识 1.1提出问题 1.2如何解决--版本控制器 1.3注意事项 2.Git安装 2.1Linux-centos安装 2.2Linux-ubuntu安装 2.3Windows安装 3.Git基本操作 3.1创建Git本地仓库 3.2配置Git 4.认识⼯作区、暂存区、版本库 1.Git初识 1.1提出问题 不知道你工作或学习时…...

理解DuLinkList L中的“”引用符号

在C中&#xff0c;DuLinkList &L 这种形式的参数表示 L 是一个 DuLinkList 类型的引用。这里的 & 符号表示引用。 引用是C的一个特性&#xff0c;它提供了一种方式来访问已存在的变量的别名。当你对引用进行操作时&#xff0c;实际上是在操作它所引用的变量。如果你在…...

前端并发多个请求并失败重发

const MAX_RETRIES 3;// 模拟请求 function makeRequest(url) {return new Promise((resolve, reject) > {setTimeout(() > {Math.random() < 0.75 ? resolve(${url} 成功) : reject(${url} 失败); // 随机决定请求是否成功}, Math.random() * 2000); // 随机延时执…...

【Qt开发流程】之对象模型2:属性系统

描述 Qt提供了一个复杂的属性系统&#xff0c;类似于一些编译器供应商提供的属性系统。然而&#xff0c;作为一个独立于编译器和平台的库&#xff0c;Qt不依赖于非标准的编译器特性&#xff0c;如__property或[property]。 Qt解决方案适用于Qt支持的所有平台上的任何标准c编译…...

PHP之curl详细讲解

cURL&#xff08;全称为Client for URLs&#xff09;是一个功能强大的开源库&#xff0c;用于在多种协议上进行数据传输、发送HTTP请求和获取响应。它支持多种协议&#xff0c;包括HTTP、HTTPS、FTP、SMTP等&#xff0c;并且能够与各种服务器进行通信。 cURL库可以通过命令行工…...

R语言30分钟上手

文章目录 1. 环境&安装1.1. rstudio保存工作空间 2. 创建数据集2.1. 数据集概念2.2. 向量、矩阵2.3. 数据框2.3.1. 创建数据框2.3.2. 创建新变量2.3.3. 变量的重编码2.3.4. 列重命名2.3.5. 缺失值2.3.6. 日期值2.3.7. 数据框排序2.3.8. 数据框合并(合并沪深300和中证500收盘…...

上下拉电阻会增强驱动能力吗?

最近看到一个关于上下拉电阻的问题&#xff0c;发现不少人认为上下拉电阻能够增强驱动能力。随后跟几个朋友讨论了一下&#xff0c;大家一致认为不存在上下拉电阻增强驱动能力这回事&#xff0c;因为除了OC输出这类特殊结构外&#xff0c;上下拉电阻就是负载&#xff0c;只会减…...

题目:小明的彩灯(蓝桥OJ 1276)

题目描述&#xff1a; 解题思路&#xff1a; 一段连续区间加减&#xff0c;采用差分。最终每个元素结果与0比较大小&#xff0c;比0小即负数输出0。 题解&#xff1a; #include<bits/stdc.h> using namespace std;using ll long long; const int N 1e5 10; ll a[N],…...

换元法求不定积分

1.一般步骤&#xff1a;选取换元对象&#xff08;不一定是式子中的值&#xff0c;也可以是式子中的最小公倍数或者最大公因数&#xff09;&#xff0c;然后将dx换为dt*t的导数&#xff0c;再用t将原式表示&#xff0c;化简计算即可 2. 3. 4. 5. 6....

在Docker容器中启用SSH服务,实现外部访问的详细教程

目录 步骤 1: 安装 SSH 服务器 步骤 2: 配置 SSH 服务器 步骤 3: 设置 SSH 用户 步骤 4: 重启 SSH 服务器 步骤 5: 映射容器端口 步骤 6: 使用 SSH 连接到容器 要在Docker容器中启用SSH服务&#xff0c;以便从外部访问&#xff0c;您需要执行以下步骤&#xff1a; 步骤 …...

Go 模块系统最小版本选择法 MVS 详解

目录 Golang 模块系统简介 包版本管理 最小版本选择&#xff08;MVS&#xff09;原理 MVS 的优点 MVS的缺点 实际使用MVS 小结 参考资料 Golang 模块系统简介 Golang 模块系统是 Go 1.11 版本引入的一个新特性&#xff0c;主要目的是解决 Go 项目中的依赖管理问题。在模…...

ifstream读取txt中的中文数据转成QString出现乱码

使用ifstream从txt文本中读取中文数据到string&#xff0c;再将string转成QString输出时出现了乱码。 分析&#xff1a;如果ifstream能成功从txt文本中读出中文数据&#xff0c;那大概率txt用的编码是ANSI编码&#xff08;GBK就是ANSI的一种&#xff09;&#xff0c;那么在转成…...

UE4 双屏分辨率设置

背景&#xff1a; 做了一个UI 应用&#xff0c;需要在双屏上进行显示。 分辨率如下&#xff1a;3840*1080&#xff1b; 各种折腾&#xff0c;其实很简单&#xff1a; 主要是在全屏模式的时候 一开始没有选对&#xff0c;双屏总是不稳定。 全屏模式改成&#xff1a;Windows 之…...

$sformat在仿真中打印文本名的使用

在仿真中&#xff0c;定义队列&#xff0c;使用任务进行函数传递&#xff0c;并传递文件名&#xff0c;传递队列&#xff0c;进行打印 $sformat(filename, “./data_log/%0d_%0d_%0d_0.txt”, f_num, lane_num,dt); 使用此函数可以自定义字符串&#xff0c;在仿真的时候进行文件…...

【Rust】结构体与枚举

文章目录 结构体struct基础用法使用字段初始化简写语法使用没有命名字段的元组结构体来创建不同的类型没有任何字段的类单元结构体方法语法关联函数多个 impl 块 枚举枚举值Option 结构体struct 基础用法 一个存储用户账号信息的结构体&#xff1a; struct User {active: bo…...

CentOS7 防火墙常用命令

以下是在 CentOS 7 上使用 firewall-cmd 命令管理防火墙时的一些常用命令&#xff1a; 检查防火墙状态&#xff1a; sudo firewall-cmd --state 启动防火墙&#xff1a; sudo systemctl start firewalld 停止防火墙&#xff1a; sudo systemctl stop firewalld 重启防火墙&…...

【无标题】什么是UL9540测试,UL9540:2023版本增加哪些测试项目

什么是UL9540测试&#xff0c;UL9540:2023版本增加哪些测试项目 UL 9540是美国安全实验室&#xff08;Underwriters Laboratories&#xff09;发布的标准&#xff0c;名称为"UL 9540: Energy Storage Systems and Equipment"&#xff0c;翻译为中文为"能量存储…...

springcloud整合Oauth2自定义登录/登出接口

我使用的是password模式&#xff0c;并配置了token模式 一、登录 (这里我使用的示例是用户名密码认证方式) 1. Oath2提供默认登录授权接口 org.springframework.security.oauth2.provider.endpoint.postAccess; Tokenpublic ResponseEntity<OAuth2AccessToken> pos…...

Oracle常见内置程序包的使用Package

Oracle常见内置程序包的使用 点击此处可跳转至&#xff1a;Oracle的程序包(Package)&#xff0c;对包的基础进行学习常见内置程序包的使用Package1、DBMS_OUTPUT包2、DBMS_XMLQUERY包3、DBMS_RANDOM包4、UTL_FILE包5、DBMS_JOB包6、DBMS_LOB包7、DBMS_SQL包8、DBMS_LOCK包9、DB…...

Flutter:视频下载案例

前言 最近在研究视频下载&#xff0c;因此打算一边研究一边记录一下。方便以后使用时查看。 使用到的库有&#xff1a; permission_handler 11.1.0 &#xff1a;权限请求 flutter_downloader 1.11.5&#xff1a;文件下载器 path_provider 2.1.1&#xff1a;路径处理 视频…...

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南

要求CHATGPT高质量回答的艺术&#xff1a;提示工程技术的完整指南 第2章&#xff1a;指令提示技术 现在&#xff0c;让我们开始探索“指令提示技术”&#xff0c;以及如何使用它从ChatGPT生成高质量的文本。 指令提示技术是一种通过为模型提供特定指令来指导ChatGPT输出的方…...

JDK 历史版本下载以及指定版本应用

参考&#xff1a; 官网下载JAVA的JDK11版本&#xff08;下载、安装、配置环境变量&#xff09;_java11下载-CSDN博客 Gradle&#xff1a;执行命令时指定 JDK 版本 - 微酷网 下载 打开官网地址 Java Downloads | Oracle 当前版本在这里&#xff0c;但是我们要下载历史版本 选…...

Linux基础项目开发1:量产工具——UI系统(五)

前言&#xff1a; 前面我们已经把显示系统、输入系统、文字系统搭建好了&#xff0c;现在我们就要给它实现按钮操作了&#xff0c;也就是搭建UI系统&#xff0c;下面让我们一起实现UI系统的搭建吧 目录 一、按钮数据结构抽象 ui.h 二、按键编程 1.button.c 2.disp_manager…...

面试就是这么简单,offer拿到手软(四)—— 常见java152道基础面试题

面试就是这么简单&#xff0c;offer拿到手软&#xff08;一&#xff09;—— 常见非技术问题回答思路 面试就是这么简单&#xff0c;offer拿到手软&#xff08;二&#xff09;—— 常见65道非技术面试问题 面试就是这么简单&#xff0c;offer拿到手软&#xff08;三&#xff…...

优跃达官网网站建设项目/爱站网排行榜

3-1、标识符。为什么python 中不需要变量名和变量类型声明&#xff1f; python语言是动态的、强类型语言&#xff0c;一言以蔽之&#xff01; 动态编译语言特点&#xff1a;  ◆不用事先声明类型&#xff0c;随时赋值为其他类型  ◆编译时不知道是什么类型&#xff0c;很难…...

wordpress图片属性添加图片/seo值怎么提高

中介者模式 用一个 中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用&#xff0c;从而使其耦合松散&#xff0c;可以独立地改变它们之间的交互。 适用场景 1、一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。 …...

甘肃建设体网站首页/网络营销

目前项目中使用的是elasticsearch-1.5.1版本&#xff0c;使用到的插件如下&#xff1a; 1. hq 监控&#xff0c;管理elasticsearch集群以及通过web界面来进行查询操作 项目地址&#xff1a; https://github.com/royrusso/elasticsearch-HQ2. analysis-ik ik分词器&#xff0c;中…...

男女做爰高清免费视频网站/网络营销的方式与手段

上次看到按键精灵&#xff0c;更新了支持socket通讯的插件&#xff0c;于是兴冲冲的去看了下&#xff0c;结果有点失望。然后学了2天的lua脚本&#xff0c;自己开发了一个socket的插件。下面把完整代码贴上来--设置消息内容function QMPlugin.SendMsg(msg)contentMsg msgend--…...

室内设计师资格证书/seo技术教程

1.在Java中&#xff0c;如果父类中的某些方法不包含任何逻辑&#xff0c;并且需要有子类重写&#xff0c;应该使用&#xff08;c&#xff09;关键字来申明父类的这些方法。 a. Finalc b. Static c. Abstract d. Void 2.给定两个java程序&#xff0c;如下&#xff1a; public…...

代做设计网站好/企业培训课程名称

一、IPO模型一个程序&#xff0c;按照功能可以划分为三个部分&#xff1a;输入部分、处理部分和输出部分本讲我们学习基本输入与输出&#xff0c;通过输入函数获取数据(数值型和字符串)&#xff0c;通过输出函数将处理结果以某种方式呈现。处理部分会涉及到各种各样的运算&…...