| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 大数据 -> 记录一次spark2.x数据倾斜(隐藏的笛卡尔积)排查处理过程 -> 正文阅读 |
|
|
[大数据]记录一次spark2.x数据倾斜(隐藏的笛卡尔积)排查处理过程 |
|
目录 一、问题描述有一个dwd层中间表的入表任务,有几天的日期永远无法执行成功,平时的任务时间大概在2分钟。之前也遇到过一次这样的情况,是通过排查脏数据得到了解决(长字符串id中有不规则脏字符),这次实在没有头绪。 二、尝试调整参数因为查看yarn任务的页面,发现总是报错在拒绝连接,看到有个别任务总是执行半天卡住,并且shuffle的records数量也明显高于其他exceutor,并且不仅spill到内存,甚至到了磁盘,说明还是数据倾斜。于是上网查找优化资料,陆续调整了几个参数: --conf spark.shuffle.sort.bypassMergeThreshold=5000 (该参数应该是设置不合理,作用也不明显,后剔除) --conf spark.reducer.maxSizeInFlight=256M --conf spark.shuffle.file.buffer=96K 当加上第3个参数之后,任务不会那么快跑崩了,但最后还是存在问题。 也考虑在join的key上增加随机数前缀(2表关联,a表增加0-n随机数前缀,b表扩充随机数范围的n倍(0到n每个都作为前缀放到b表前,这样保证能和a表关联上)),但是任务sql较大,关联表过多,所以即便加随机数也要知道加在哪一步。于是决定查看spark的执行计划的sql流程图。 三、查看spark具体sql流程图
整个图很长,但是只要没有spill信息的都不太重要,最后发现了红框的地方,找到上游表。但是看到这个表的时候,我十分困惑,因为这个表是目的表的前7天数据,里面包含新用户和回流用户。按理说新用户和回流用户即便是多天融合,也不应该存在重复,但是口说无凭,查询这些天的新用户表,进行查看: ? 果然!新用户表存在id重复现象。那么一个是反馈给上游做表的同学(次要),一个是采取去重处理(主要,因为重复不多,而且之前验证过一天的新用户是没有重复的,所以考虑仍为uuid哈希碰撞这样的原因) 。 最终只要在有重复的表加一句group by 去重即可。
最后一天只要3分钟就成功跑完,问题解决。? |
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年10日历 | -2025/10/27 21:40:52- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |