数据倾斜解决方案之三:使用随机Key实现双重聚合
来源:互联网 发布:js判断ie版本是否大于7 编辑:程序博客网 时间:2024/05/18 18:54
数据倾斜解决方案之三:使用随机Key实现双重聚合
本节讲解使用随机Key实现双重聚合,首先讲解什么是随机Key双重聚合;接下来讲解使用随机Key实现双重聚合解决数据倾斜的适用场景、原理分析、案例实战以及使用随机Key实现双重聚合解决数据倾斜注意事项等内容。
30.4.1 什么是随机Key双重聚合?
随机Key双重聚合是指:Spark分布式计算对RDD调用reduceByKey各算子进行计算,使用对Key值随机数前缀的处理技巧,对Key值进行二次聚合:
1、 第一次聚合(局部聚合):对每一个Key值加上一个随机数,执行第一次reduceByKey聚合操作。
2、 第二次聚合(双重聚合):去掉Key值的前缀随机数,执行第二次reduceByKey聚合,最终得到全局聚合的结果。
30.4.2使用随机Key实现双重聚合解决数据倾斜的适用场景分析
适用于groupByKey、reduceByKey等算子操作数据时某些Key值发生数据倾斜的情况。例如电商广告点击系统中,如果根据用户点击的省份进行汇聚,原来的Key值是省份,如果某些省份的Value值特别多,发生了数据倾斜,可以将每个Key拆分为成多个Key,加上随机数前缀将Key值打散,组拼成random_省份的新的Key值,调用reduceByKey
做局部聚合,然后再将random_前缀去掉,形成的Key值仍为省份,再调用reduceByKey,进行全局聚合。
30.4.3使用随机Key实现双重聚合解决数据倾斜原理分析
使用随机Key实现双重聚合解决数据倾斜原理分析:例如reduceByKey
假设说有倾斜的Key,我们给所有的Key加上一个随机数,然后进行reduceByKey操作;此时同一个Key会有不同的随机数前缀,在进行reduceByKey操作的使用原来的一个非常大的倾斜的Key就分而治之变成若干个更小的Key,不过此时结果和原来不一样,怎么破?进行map操作,map操作的目的是把随机数前缀去掉,然后再次进行reduceByKey操作,(当然,可以再次做随机数前缀),这样我们就可以把原本倾斜的Key通过分而治之方案分散开来,最后又进行了全局聚合。在这里的本质还是通过改变并行度去解决数据倾斜的问题。
30.4.4使用随机Key实现双重聚合解决数据倾斜案例实战
使用随机Key实现双重聚合解决数据倾斜案例实战:我们看一个reduceByKey(_+_)的示例。假设RDD不同Partition的数据内容分别为 (1,1)(1,2)(1,3)以及(2,1)(1,2)(1,3),我们通过map操作加上随机数,将数据转换为(1_1,1)(2_1,2)(3_1,3)以及(1_2,1)(2_1,2)(3_1,3);然后我们进行reduceByKey的累加操作,汇聚的结果为(1_1,1)(2_1,4)以及(3_1,6)(1_2,1),然后通过map转换去掉随机数前缀,转换为(1,1)(1,4)以及(1,6)(2,1)再进行一次reduceByKey操作,转换成(1,11)以及(2,1)。最终将结果输出到Output file1、Output file2。如图 30- 5所示。
图 30- 2 reduceByKey操作示意图
30.4.5使用随机Key实现双重聚合解决数据倾斜注意事项
使用随机Key实现双重聚合解决数据倾斜方案局限于单个RDD的reduceByKey、groupByKey等算子。如果两个RDD的数据量都特别大而且倾斜的Key特别多就无法采用分而治之进行双重聚合的方法,我们需综合应用各种数据倾斜的解决方案,例如通过扩容来进行Join操作解决数据倾斜问题。
- 数据倾斜解决方案之三:使用随机Key实现双重聚合
- Spark优化-数据倾斜解决方案 聚合源数据以及过滤导致倾斜的key
- spark 数据倾斜解决方案 (二)聚合源数据以及过滤导致倾斜的key
- 数据倾斜解决方案之六:使用随机数进行Join
- Saprk数据倾斜七解决方案(三)
- 数据倾斜解决方案
- hive数据倾斜解决方案
- MapReduce数据倾斜解决方案1--1、重新设计key---二次作业
- hive数据倾斜的解决方案
- 数据倾斜的两个解决方案
- spark数据倾斜解决方案(三) 提高shuffle操作reduce并行度
- Spark系列之数据倾斜:数据倾斜之痛
- Spark系列之数据倾斜:数据倾斜之痛
- 第138课: Spark面试经典系列之数据倾斜解决之采样分而治之解决方案
- Spark面试经典系列之数据倾斜解决方案的“银弹”是什么? 本节我们对Spark数据倾斜解决方案进行回顾和总结
- 第139课: Spark面试经典系列之数据倾斜解决之对于两个RDD数据量都很大且倾斜的Key特别多如何解决?
- 第139课: Spark面试经典系列之数据倾斜解决之对于两个RDD数据量都很大且倾斜的Key特别多如何解决?
- hive数据倾斜的解决方案【常见】
- [Amazon] Partion Array
- 个人第一篇博客 库文件 使用 教训
- UVA11645 Bits【位运算+大数】
- 17_7_13:合并两个有序链表。实现1+2+3+...+n,不使用常规方法
- SVN使用
- 数据倾斜解决方案之三:使用随机Key实现双重聚合
- 关于烙饼排序问题的算法与Java实现
- jsp中c标签的使用
- Git 学习笔记
- Docker Basic
- 7.12
- 手机综合征
- Java Map 按Key排序和按Value排序
- 【PHP】单词十以内的加法de多种解法