0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

Wildesbeast 来源:搜狐新闻 作者:千锋大数据开发学 2019-11-09 13:58 次阅读

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

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数据倾斜简单方法。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RDD
    RDD
    +关注

    关注

    0

    文章

    7

    浏览量

    7964
  • 大数据
    +关注

    关注

    64

    文章

    8849

    浏览量

    137164
收藏 人收藏

    评论

    相关推荐

    大数据技术经验交流 场景化数据算法

    可视化数据指导,让每一个人看懂大数据;多场景数据算法,让所有数据都有迹可循;大数据技术经验交流群
    发表于 06-01 17:12

    常用大数据处理技术归类

    “21世纪最缺的是什么?人才!”。在大数据发展如此之快的今天,大数据工程师已经成为一个新兴职业。大数据是信息技术,是人和人、人和机器、机器和机器交互的内容特征,是最底层的信息
    发表于 02-28 17:02

    如何从零学大数据

    新如何学习大数据技术大数据怎么入门?怎么做大数据分析?数据科学需要学习那些技术
    发表于 03-01 15:41

    常见大数据应用有哪些?

    大数据技术为决策提供依据,在***、企业、科研项目等决策中扮演着重要的角色,在社会治理和企业管理中起到了不容忽视的作用,很多国家,如中国、美国以及欧盟等都已将大数据列入国家发展战略,微软、谷歌、百度
    发表于 03-13 16:50

    大数据运用的技术

    领域也有所应用,主要可用于数据采集、数据分析以及数据可视化等,因此,大数据开发需学习一定的Python知识。只有完整的学完以上
    发表于 04-08 16:50

    大数据数据类型

    大数据不仅仅是一个数据,它是大数据集的集合,不能使用传统的计算技术来处理,宏观上来讲,它不仅包括需处理的数据,还包括各种工具、
    发表于 05-11 15:57

    大数据开发核心技术详解

    数据的核心是云技术和BI。关于大数据和云计算的关系人们通常会有误解,而且也会把它们混起来说,分别做一句话直白解释就是:云计算就是硬件资源的虚拟化;大数据就是海量
    发表于 07-26 16:26

    DKHadoop大数据开发框架的构成模块

    大数据的应用开发太过偏向于底层,学习的难度不是一般的大,所涉及到的技术面广太大,不是一般人所能够驾驭得了的。市场上大部分打着hadoop国产发行版,也只是把国外的拿过来重新修改了一下而已。大快
    发表于 10-19 15:12

    大数据平台开发公司有哪些?

    到大快搜索的名字脑海里的第一反应是莫非又是一个像百度一样做搜索引擎的公司。完全不是哦,这是一个开放的搜索和大数据技术平台,提供开放的搜索、大数据和人工只能服务。大快主要是从事大数据
    发表于 11-15 15:17

    大数据应用开发如何入门需要知道这些

    底层,它的学习难度之大真不是你三两篇分享文章就能说的清楚的,它所涉及的技术层面太多广泛,都在很大程度上制约了大数据的普及,不然大数据人才也不会如此稀少! 对于想要学习大数据
    发表于 11-26 14:49

    Hive中数据倾斜的原因和解

    Hive中数据倾斜解决实例
    发表于 06-21 16:48

    大数据的定义及其应用

    目录1、大数据概述1.1. 概述1.2. 大数据定义1.3. 大数据技术发展2、大数据应用2.1. 大数
    发表于 07-12 06:12

    什么是大数据大数据的特点有哪些

    大数据(big data)目录1什么是大数据2大数据的定义3大数据的特点[1]4大数据的作用[2]5大数
    发表于 07-12 06:52

    大数据技术与应用是学什么的?

    大数据技术与应用是学什么的?大数据是指无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。大数据
    发表于 07-27 07:47

    领域大数据应用开发与运行平台技术研究

    随着大数据技术在不同领域的快速应用,构建大数据应用系统的开发与运行一体化平台,降低大数据技术在各
    发表于 12-28 14:28 0次下载
    领域<b class='flag-5'>大数据</b>应用<b class='flag-5'>开发</b>与运行平台<b class='flag-5'>技术</b>研究