博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark数据倾斜及解决方案
阅读量:5821 次
发布时间:2019-06-18

本文共 5138 字,大约阅读时间需要 17 分钟。

一.场景

  1.绝大多数task执行得都非常快,但个别task执行极慢。比如,总共有100个task,97个task都在1s之内执行完了,但是剩余的task却要一两分钟。这种情况很常见。

  2.原本能够正常执行的Spark作业,某天突然报出OOM(内存溢出),观察异常栈,是我们写的业务代码造成的。这种情况比较少见。

二.原理

  在进行shuffle的时候,必须将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行group或join等操作。此时如果某个key对应的数据量特别大的话,就会发生数据倾斜。比如大部分key对应1万条数据,但是个别key却对应了100万条数据,那么大部分task可能就只会分配到1万条数据,然后1s就运行完了;但是个别task可能分配到了100万数据,要运行一两分钟。因此,整个Spark作业的运行进度是由运行时间最长的那个task决定的。

  因此出现数据倾斜的时候,Spark作业看起来会运行得非常缓慢,甚至可能因为某个task处理的数据量过大导致内存溢出。

比如下面这个例子:

  

三.代码实现

1 package big.data.analyse.dataskew 2  3 import org.apache.spark.sql.SparkSession 4  5 /** 6   * Created by zhen on 2019/1/12. 7   */ 8 object DataSkew { 9   def main(args: Array[String]) {10     val spark = SparkSession.builder().appName("数据倾斜").master("local[2]").getOrCreate()11     val sqlContext = spark.sqlContext12     // 数据路径13     val dataPath = "./src/big/data/analyse/dataskew/data.csv"14     // spark读取csv数据15     val data = sqlContext.read.format("com.databricks.spark.csv")16     .option("header", "true") // 在csv第一行有属性true,没有就是false17     .option("inferSchema", true) // 这是自动推断属性列的数据类型18     .load(dataPath)19     // 实现wordCount20     // 转化data,对data进行扩容21     val data_left = data.rdd.flatMap( row =>{22       for(i <-0 until 10) yield (i +"_"+ row.getAs("XMMC"), row)23     })24     // 生成随机数拼接key,避免数据倾斜25     val data_right = data.rdd26       .map(row => ((Math.random()* 10).toInt +"_"+ row.getAs("XMMC"), row))27     // 关联数据28     val mid = data_left.join(data_right)29     //去掉拼接随机数30     val result = mid.map(row => row._2)31     // 打印结果32     result.foreach(println)33   }34 }

四.使用数据部分展示

"ROWNUM","XMMC","RWMC","FZR","BMMC","RWCJSJ","RWQSSJ","SJCLSJ""1","220kV变电站消防火灾报警系统大修等两个项目","招标方案/招标方案编制","***","继保自动化一班","2017/1/3 9:15:34","2017/1/3 9:15:34","2017/1/17 8:20:45""2","220kV变电站消防火灾报警系统大修等两个项目","招标方案/承办单位主管审核","***","生产设备管理部","2017/1/17 8:20:46","2017/1/17 14:37:01","2017/1/17 14:37:18""3","220kV变电站消防火灾报警系统大修等两个项目","招标方案/承办单位主要负责人审核","***","领导班子","2017/1/17 14:37:18","2017/1/17 15:03:17","2017/1/17 15:03:26""4","220kV变电站消防火灾报警系统大修等两个项目","招标方案/承办人流转","***","继保自动化一班","2017/1/17 15:03:26","2017/1/17 17:19:11","2017/1/19 8:30:09""5","220kV变电站消防火灾报警系统大修等两个项目","招标方案/项目管理部门专责审核","***","资产管理部(与生产设备管理部合署)","2017/1/19 8:30:09","2017/1/20 15:26:43","2017/1/20 15:28:05""6","220kV变电站消防火灾报警系统大修等两个项目","招标方案/项目管理部门科长审核","***","生产管理科","2017/1/20 15:28:05","2017/1/25 10:23:13","2017/1/25 10:23:33""7","220kV变电站消防火灾报警系统大修等两个项目","招标方案/招标专业小组副组长审核","***","资产管理部(与生产设备管理部合署)","2017/1/25 10:23:33","2017/2/8 12:03:01","2017/2/8 12:03:24""8","220kV变电站消防火灾报警系统大修等两个项目","招标方案/招标专业小组组长审核","***","资产管理部(与生产设备管理部合署)","2017/2/8 12:03:24","2017/2/8 12:03:24","2017/2/8 12:03:37""9","220kV变电站消防火灾报警系统大修等两个项目","招标方案/项目分管局领导审核","***","局领导","2017/2/8 12:03:37","2017/2/17 9:24:25","2017/2/17 9:24:30""10","220kV变电站消防火灾报警系统大修等两个项目","招标方案/招标管理小组组长审核","***","局领导","2017/2/17 9:24:30","2017/2/17 13:06:06","2017/2/17 13:06:21"

五.部分结果展示

([22528,2017年普法专项——法治文化宣传片,结果公告/结果公告,***,null,2017/11/16 16:25:59,2017/11/17 13:05:59,2017/11/21 16:21:38],[22528,2017年普法专项——法治文化宣传片,结果公告/结果公告,***,null,2017/11/16 16:25:59,2017/11/17 13:05:59,2017/11/21 16:21:38])([54441,2018年输变电设备状态评价系统检测,采购方案/承办人流转,***,安全生产部,2017/12/6 19:55:15,2017/12/7 8:00:36,2017/12/7 8:00:44],[54450,2018年输变电设备状态评价系统检测,项目发售/项目发售,***,null,2017/12/11 12:03:25,2017/12/11 12:03:26,2017/12/21 16:32:03])([22529,2017年普法专项——法治文化宣传片,结果通知/结果通知,***,null,2017/11/21 16:21:38,2017/11/21 16:21:39,2017/11/24 16:21:28],[22506,2017年普法专项——法治文化宣传片,采购方案/承办部门科长审核,***,法务一科,2017/8/18 15:56:08,2017/8/18 15:57:08,2017/8/18 15:57:31])([54441,2018年输变电设备状态评价系统检测,采购方案/承办人流转,***,安全生产部,2017/12/6 19:55:15,2017/12/7 8:00:36,2017/12/7 8:00:44],[54454,2018年输变电设备状态评价系统检测,结果公示/结果公示,***,null,2017/12/22 10:52:16,2017/12/22 10:52:17,2017/12/22 10:52:21])([22529,2017年普法专项——法治文化宣传片,结果通知/结果通知,***,null,2017/11/21 16:21:38,2017/11/21 16:21:39,2017/11/24 16:21:28],[22512,2017年普法专项——法治文化宣传片,采购方案/招标专业小组组长审核,***,企业管理部,2017/9/1 10:14:08,2017/9/4 15:30:00,2017/9/4 15:30:16])([54441,2018年输变电设备状态评价系统检测,采购方案/承办人流转,***,安全生产部,2017/12/6 19:55:15,2017/12/7 8:00:36,2017/12/7 8:00:44],[54455,2018年输变电设备状态评价系统检测,项目定标/项目定标,***,安全生产部,2017/12/22 10:52:21,2017/12/22 11:17:11,2018/1/2 9:48:07])([22529,2017年普法专项——法治文化宣传片,结果通知/结果通知,***,null,2017/11/21 16:21:38,2017/11/21 16:21:39,2017/11/24 16:21:28],[22515,2017年普法专项——法治文化宣传片,采购文件/招标文件编制,***,null,2017/9/4 16:27:51,2017/10/19 11:03:53,2017/10/23 8:52:32])([54442,2018年输变电设备状态评价系统检测,采购文件/采购项目负责人指定,****工程监理有限公司,null,2017/12/7 8:00:44,2017/12/7 9:57:47,2017/12/7 9:58:19],[54437,2018年输变电设备状态评价系统检测,采购方案/项目管理部门专责审核,***,资产管理部(与生产设备管理部合署),2017/11/23 16:56:58,2017/11/29 13:11:09,2017/11/29 13:12:06])([22529,2017年普法专项——法治文化宣传片,结果通知/结果通知,***,null,2017/11/21 16:21:38,2017/11/21 16:21:39,2017/11/24 16:21:28],[22521,2017年普法专项——法治文化宣传片,采购发布/公布发布,***,null,2017/10/27 9:58:58,2017/10/27 11:46:44,2017/10/27 11:46:55])([54442,2018年输变电设备状态评价系统检测,采购文件/采购项目负责人指定,****工程监理有限公司,null,2017/12/7 8:00:44,2017/12/7 9:57:47,2017/12/7 9:58:19],[54440,2018年输变电设备状态评价系统检测,采购方案/招标专业小组组长审核,***,资产管理部(与生产设备管理部合署),2017/12/5 17:31:46,2017/12/6 19:55:09,2017/12/6 19:55:15])

 

转载于:https://www.cnblogs.com/yszd/p/10260608.html

你可能感兴趣的文章
贪吃蛇
查看>>
EventSystem
查看>>
用WINSOCK API实现同步非阻塞方式的网络通讯
查看>>
玩一玩博客,嘿嘿
查看>>
P1352 没有上司的舞会
查看>>
ios11文件夹
查看>>
【HLOJ 559】好朋友的题
查看>>
Electric Fence(皮克定理)
查看>>
nvl 在mysql中如何处理
查看>>
MyEclipse 快捷键
查看>>
快速傅里叶变换FFT
查看>>
大数据常用基本算法
查看>>
JavaScript学习笔记(十三)——生成器(generator)
查看>>
hibernate保存失败
查看>>
MySQL增量订阅&消费组件Canal POC
查看>>
Sqlite多线程
查看>>
数据结构-时间复杂度
查看>>
对象与字符串相互转换
查看>>
[NOIp2017提高组]小凯的疑惑
查看>>
《C程序设计语言》练习1-5
查看>>