快捷搜索:

大数据开发技术的数据倾斜是怎样造成的如何查

常见的数据倾斜是怎么造成的?

Shuffle的时刻,将各个节点上相同的key拉取到某个节点的一个task进行处置惩罚,比如按照key进行聚合或join等操作,假如某个key对应的数据量分外大年夜的话,就会发生数据倾斜征象。数据倾斜就成为了全部task运行光阴的短板。

触发shuffle的常见算子:distinct、groupByKey、reduceByKey、aggregateByKey、join、cogroup、repartition等。

要办理数据倾斜的问题,首先要定位数据倾斜发生在什么地方。

首先是哪个stage,直接在Web UI上看就可以,一样平常呈现倾斜都是耗时分外长的Stage,然后查看运行耗时的task,一样平常是此中的某几个Task不停拖着,其他的Task早已经完成了,根据这个task,根据stage划分道理,推算出数据倾斜发生在哪个shuffle类算子上。

若何查看发生倾斜的RDD呢?

假如是Spark RDD履行shuffle算子导致的数据倾斜,那么可以在Spark功课中加入查看key散播的代码,比如RDD.countByKey()。然后对统计出来各个key呈现的次数,collect、take到客户端打印一下,就可以看到key的散播环境。

以下措施可以大年夜概看出哪个key呈现了倾斜:

JavaPairRDDhssData = getHssData(fs, sc, hssPath);

JavaPairRDDsample = hssData.sample(false, 0.1);

MapcountByKey = sample.countByKey();

呈现倾斜的key有两种环境:

1、某个可以呈现倾斜

2、多个key呈现倾斜

某个Key呈现倾斜办理法子:

经由过程上述措施可以知道是哪个Key呈现了倾斜,以是可以先经由过程filter措施过滤掉落倾斜的Key,把倾斜的Key和没有倾斜的Key分开处置惩罚,因为Spark运行机制,以是零丁处置惩罚倾斜Key的时刻就不会再呈现倾斜征象。

上述措施只能处置惩罚特定的数据倾斜,对付实际的临盆情况可能并不怎么适用,这事是办理倾斜的此中一个措施。

多个Key呈现倾斜的办理法子:

道理:在倾斜Shuffle之前给每一个Key都加上一个随机前缀,然后再给加了前缀的Key进行一个Shuffle操作,在Shuffle操作后再把Key的前缀去掉落。在这个历程中因为前缀的加入,会把倾斜的Key随机的分配到不合的Task。然后去掉落前缀从而办理数据倾斜的问题。

private static JavaPairRDDrepar(

JavaPairRDD。Cdr) {

JavaPairRDDmapToPair;

try {

mapToPair = 。Cdr

.mapToPair(new PairFunctiontuple2, String, agg() {

@Override

public Tuple2call(Tuple2t)

throws Exception {

//孕育发生随机前缀,随机数大年夜鄙视环境抉择

long i = (long) (Math.random() * 150);

//添加随机数前缀

return new Tuple2(i + _ + t._1, t._2);

}

}).sortByKey()//进行一个Shuffle操作打乱Key

//去掉落随机数前缀

.mapToPair(new PairFunctiontuple2, String, agg() {

@Override

public Tuple2call(Tuple2t)

throws Exception {

String str = t.1.split()[0];

return new Tuple2(str, t._2);

}

});

} catch (Exception e) {

return null;

}

return mapToPair;

}

以上是办理RDD数据倾斜简单措施。

您可能还会对下面的文章感兴趣: