当前位置: 首页 > 知识库问答 >
问题:

做盐渍技术后的DataSkew-Spark和Scala

裴宜春
2023-03-14

我想问一下我在火花工作中遇到的数据偏斜问题。我知道如果你有数据偏差,最佳实践技巧之一是做盐渍技术。在我的 Spark 作业中,我必须在两个数据帧之间执行联接(其中一个数据帧的大小约为 5 GB)。

此外,我通常用一个数字和我用来连接的字段重新分区,以便在连接之前尽可能多地控制分区。因此,我使用shuffle将连接转换为具有窄依赖关系的映射连接。

df.repartition(numRep, colJoin: _*).sortWithinPartitions(colJoin: _*)

场景是:

  • 我有24个执行器,每个执行器有4个核心
  • 我将shufflePartitions设置为96
  • 我避免使用spark.conf.set(“spark.sql.autoBroadcastJoinThreshold”,-1)进行自动广播
  • 连接前的重新分区数为192(2*96)(线程的两倍)。因此,每个执行器有8个任务/分区

问题是在做了加盐之后,我还没有数据倾斜,并且连接需要很长时间。

所以,我的问题是:我应该做什么?增加加盐的次数?做两次或更多次加盐?增加重新分区的次数?是否有任何功能可以知道数据偏向哪个分区?

共有1个答案

吕征
2023-03-14

如果您正在进行左外部连接,那么在左数据帧中有大量带有空连接键的记录可能会导致歪斜,因为spark会将所有这些记录重新排列到单个分区中。在这种情况下,您可以在执行联接之前过滤掉带有空键的记录。

在尝试salting之前,我会做的另一个方法是通过对键列进行分组来执行数据分析,以了解偏斜有多严重,并更好地理解数据偏斜。

从spark web UI,您可以转到一个阶段,通过按任务持续时间对其进行排序来识别哪个任务(或分区)有偏差

或者如果阶段运行成功,请查看每个阶段的摘要指标。以下是数据歪斜的示例
数据歪斜示例阶段

 类似资料:
  • 在Ubuntu 12.04上,我创建了几个用户和密码,然后立即用开膛手约翰破解这些密码。一个密码很强,但其他密码都在我的单词列表中。 约翰还在跑,但我已经在大约20分钟内破解了两个。 我读到的每一篇文章都在谈论盐是否为人所知。以此哈希为例: 盐是: 正当我是说,这不是一直都知道吗?所以盐除了防止使用彩虹桌外,真的没有任何作用,对吗? 此外,还有以下帖子: 要用多长时间的时间来暴力处理一个腌制的SH

  • 我正在尝试将一个100万行数据帧与一个30行数据帧进行内部连接,这两个表都有相同的连接键,spark正在尝试执行排序合并连接,因此我的所有数据最终都在同一个执行器中,例如,Job从未完成 我试着跟随 广播 已重新分区 查询执行计划 分区数的输出 即使我重新分区/广播数据,火花在加入时将所有数据带到一个执行器,数据在一个执行器上会发生倾斜。我还尝试将sortMergeJoinspark.sql.jo

  • 公司的升职要求有一条是举办过技术分享会,可是本人作为一个刚毕业一年的菜鸡实在是想不出来有什么适合分享的技术。 总感觉自己会的技术别人大概率也会,而拿自己不会的技术做分享总感觉有点心虚。感觉技术分享的范围太大了,实用的工具、源码解读、新的框架等等都可以做分享,自己优点拿不准该选什么,希望有经验的大佬可以指导一二。

  • 好水啊,不过最近在实习没咋看八股哈哈哈答不上。 arraylist和linkedlist区别 接口和抽象类的区别。 线程的状态。没答出来,全看并发的深点的问题去了哈哈哈 es的使用场景。 手撕判断环形链表和二叉树层序遍历 反问两轮技术面一轮hr面

  • 来自蓝牙客户端示例http://people.csail.mit.edu/albert/bluez-intro/x502.html,似乎只要我有设备的蓝牙MAC地址,我就可以简单地连接到远程蓝牙插座。 如果我可以简单地连接到远程蓝牙设备,我想知道蓝牙配对到底做什么。什么时候真正需要配对? 更新: 蓝牙配对是如何工作的?,配对的最终结果似乎是加密密钥存储在两侧。我假设,当您打开远程套接字连接时,调用

  • 认证(Authentication) 身份验证是大多数现有应用程序的重要组成部分。有许多不同的方法、策略和方法来处理用户授权。我们最终决定使用什幺取决于特定的应用程序要求,并且与它们的需求密切相关。 passport 是目前最流行的 node.js 认证库,为社区所熟知,并相继应用于许多生产应用中。将此工具与 Nest 框架集成起来非常简单。为了演示,我们将设置 passport-http-bea