Spark:shuffle key中包含rand问题

server/2025/1/16 3:39:10/

在shuffle的key中包含rand,一般有两种使用场景:

1、distribute by rand,将数据随机打散

2、rand出现在join的on条件中,避免数据倾斜

负面影响:如果Spark的shuffle条件中包含rand,rand的shuffle阶段发生fetch fail,有可能引起数据错误。

因此,在处理数据倾斜时将热点key打散需要注意:尽量不要在join时,对关联key使用rand()函数。因为在hive中当遇到map失败重算时,就会出现数据重复(数据丢失)的问题,spark引擎使用rand容易导致task失败重新计算的时候偶发不一致的问题。 可以使用md5加密唯一维度值的方式替代rand(), 比如: md5(concat(coalesce(sku_id, 0), ‘’, coalesce(dim_store_num, 0), ‘’, coalesce(store_id, 0), ‘_’,coalesce(delv_center_id, 0))),其中concat的字段是表的唯一粒度;也可以使用hash。

修改SQL解析

出现问题的原因是:作业在进行的shuffle的时候,同一行数据,shuffle的结果不是幂等的。如果shuffle的mapper task由于失败重算,就有可能导致shuffle的数据分配错误。

修改的目标就是:

  1. 对于同一行数据,需要shuffle的结果是幂等的。
  2. 具体的方式:把shuffle的key与数据中确定的列绑定。

对于需要根据rand进行shuffle来实现将数据进行随机打散的情况,可以把shuffle规则从rand改成与数据的确定列绑定,也就是deterministic_function(deterministic_col1,
deterministic_col2, …)

比如原本是想通过rand随机分散到20个分区里面, distribute by cast(rand(11)*20 as int) 可以修改成

distribute by rand

1、用一个整数的id对20取模
distribute by id % 20
2、 用任意一个类型字段的hash,然后对20取模
distribute by abs(hash(col) % 20)
3、避免某个字段倾斜,多考虑几个字段,降低倾斜的概率
distribute by abs(hash(col1, col2, …) % 20)


http://www.ppmy.cn/server/2377.html

相关文章

最新版的GPT-4.5-Turbo有多强

OpenAI再次用实力证明了,GPT依然是AI世界最强的玩家!在最新的AI基准测试中,OpenAI几天前刚刚发布的GPT-4-Turbo-2024-04-09版本,大幅超越了Claude3 Opus,重新夺回了全球第一的AI王座: 值得一提的是&#xf…

【刷题】图论——最小生成树:Prim、Kruskal【模板】

假设有n个点m条边。 Prim适用于邻接矩阵存的稠密图,时间复杂度是 O ( n 2 ) O(n^2) O(n2),可用堆优化成 O ( n l o g n ) O(nlogn) O(nlogn)。 Kruskal适用于稀疏图,n个点m条边,时间复杂度是 m l o g ( m ) mlog(m) mlog(m)。 Pr…

【论文笔记 | 异步联邦】Asynchronous Federated Optimization

论文信息 Asynchronous Federated Optimization,OPT2020: 12th Annual Workshop on Optimization for Machine Learning,不属于ccfa introduction 背景:联邦学习有三个关键性质 任务激活不频繁(比较难以达成条件)&…

牛客周赛 Round 39(A,B,C,D,E,F,G)

比赛链接 官方题解(视频) B题是个贪心。CD用同余最短路,预处理的完全背包,多重背包都能做,比较典型。E是个诈骗,暴力就完事了。F是个线段树。G是个分类大讨论,出题人钦定的本年度最佳最粪 题目…

【笔记】ASP.NET Core Web API之Token验证

在实际开发中经常需要对外提供接口以便客户获取数据,由于数据属于私密信息,并不能随意供其他人访问,所以就需要验证客户身份。那么如何才能验证客户的身份呢?一个简单的小例子,简述ASP.NET Core Web API开发过程中&…

Linux学习 - 管道、标准输入输出

Linux学习 - 管道、标准输入输出 Linux下的标准输入、输出、重定向、管道 在Linux系统中&#xff0c;有4个特殊的符号&#xff0c;<, ‘>’, ‘|’, ‘-‘&#xff0c;在我们处理输入和输出时存在重要但具有迷惑性的作用。 默认Linux的命令的结果都是输出到标准输出&a…

浅尝 express + ORM框架 prisma 的结合

一、prisma起步 安装&#xff1a; npm i prisma -g查看初始化帮助信息&#xff1a; prisma init -h查看初始化帮助信息结果&#xff1a; Set up a new Prisma projectUsage$ prisma init [options] Options-h, --help Display this help message --datasource-provider …

HTMLCSS(一)---HTML入门

1.1HTML&CSS&JavaScript的作用 (1)HTML 主要用于网页主体结构的搭建 (2)CSS 主要用于页面的美化 (3)JavaScript 主要用于动态处理页面元素 1.2 HTML是什么 HTML的全称是HyperText Markup Language&#xff0c;中文意为“超文本标记语言”。它的主要作用是描述网页的结构…