Spark解决数据倾斜的方法

Spark共享变量

计数器 和 广播变量是Spark提供的两个共享变量,提供给不同结点上的RDD函数使用

  • 计数器

一个只能增加,用于计数和求和的变量

创建方法是SparkContext.accumulator(v, name),其中v是初始值,name是名称

 

Spark解决数据倾斜的方法_第1张图片

  • 广播变量

一个只读变量,spark把该变量在所有结点上都缓存一份

创建方法是SparkContext.broadcast(变量)

 

Spark数据倾斜的问题

以统计文件中单词频次为例,单词作为Key,频次作为Value。有单词占用1G空间,有单词占用1K空间,单词出现频次不同,该单词占用内存空间也不等,处理效率也不同。这种现象称为数据倾斜。

分而治之的解决思想

对Key加随机数,两次分组可以解决数据倾斜问题

Spark解决数据倾斜的方法_第2张图片

 

实现方法:

Spark解决数据倾斜的方法_第3张图片

 

输出结果

  Spark解决数据倾斜的方法_第4张图片

 

Map Side Join

  • 小表 和 大表 Join

小表作为广播变量,分布式集群中每台结点缓存一份。大表根据外键字段从缓存中取出对应数据

Spark解决数据倾斜的方法_第5张图片

 

实现方法:

Spark解决数据倾斜的方法_第6张图片

 

  • 大表 和 大表JOIN

外键字段通过散列函数,分割成小表,小表之间做JOIN,最后结果合并

Spark解决数据倾斜的方法_第7张图片

 

你可能感兴趣的:(Spark,大数据,spark)