0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

大數(shù)據(jù)開發(fā)技術(shù)的數(shù)據(jù)傾斜是怎樣造成的如何查看和解決

Wildesbeast ? 來源:搜狐新聞 ? 作者:千鋒大數(shù)據(jù)開發(fā)學(xué) ? 2019-11-09 13:58 ? 次閱讀

常見的數(shù)據(jù)傾斜是怎么造成的?

Shuffle的時(shí)候,將各個(gè)節(jié)點(diǎn)上相同的key拉取到某個(gè)節(jié)點(diǎn)的一個(gè)task進(jìn)行處理,比如按照key進(jìn)行聚合或join等操作,如果某個(gè)key對應(yīng)的數(shù)據(jù)量特別大的話,就會發(fā)生數(shù)據(jù)傾斜現(xiàn)象。數(shù)據(jù)傾斜就成為了整個(gè)task運(yùn)行時(shí)間的短板。

觸發(fā)shuffle的常見算子:distinct、groupByKey、reduceByKey、aggregateByKey、join、cogroup、repartition等。

要解決數(shù)據(jù)傾斜的問題,首先要定位數(shù)據(jù)傾斜發(fā)生在什么地方。

首先是哪個(gè)stage,直接在Web UI上看就可以,一般出現(xiàn)傾斜都是耗時(shí)特別長的Stage,然后查看運(yùn)行耗時(shí)的task,一般是其中的某幾個(gè)Task一直拖著,其他的Task早已經(jīng)完成了,根據(jù)這個(gè)task,根據(jù)stage劃分原理,推算出數(shù)據(jù)傾斜發(fā)生在哪個(gè)shuffle類算子上。

如何查看發(fā)生傾斜的RDD呢?

如果是Spark RDD執(zhí)行shuffle算子導(dǎo)致的數(shù)據(jù)傾斜,那么可以在Spark作業(yè)中加入查看key分布的代碼,比如RDD.countByKey()。然后對統(tǒng)計(jì)出來各個(gè)key出現(xiàn)的次數(shù),collect、take到客戶端打印一下,就可以看到key的分布情況。

以下方法可以大概看出哪個(gè)key出現(xiàn)了傾斜:

JavaPairRDDhssData = getHssData(fs, sc, hssPath);

JavaPairRDDsample = hssData.sample(false, 0.1);

MapcountByKey = sample.countByKey();

出現(xiàn)傾斜的key有兩種情況:

1、某個(gè)可以出現(xiàn)傾斜

2、多個(gè)key出現(xiàn)傾斜

某個(gè)Key出現(xiàn)傾斜解決辦法:

通過上述方法可以知道是哪個(gè)Key出現(xiàn)了傾斜,所以可以先通過filter方法過濾掉傾斜的Key,把傾斜的Key和沒有傾斜的Key分開處理,由于Spark運(yùn)行機(jī)制,所以單獨(dú)處理傾斜Key的時(shí)候就不會再出現(xiàn)傾斜現(xiàn)象。

上述方法只能處理特定的數(shù)據(jù)傾斜,對于實(shí)際的生產(chǎn)環(huán)境可能并不怎么適用,這事是解決傾斜的其中一個(gè)方法。

多個(gè)Key出現(xiàn)傾斜的解決辦法:

原理:在傾斜Shuffle之前給每一個(gè)Key都加上一個(gè)隨機(jī)前綴,然后再給加了前綴的Key進(jìn)行一個(gè)Shuffle操作,在Shuffle操作后再把Key的前綴去掉。在這個(gè)過程中由于前綴的加入,會把傾斜的Key隨機(jī)的分配到不同的Task。然后去掉前綴從而解決數(shù)據(jù)傾斜的問題。

private static JavaPairRDDrepar(

JavaPairRDD。Cdr) {

JavaPairRDDmapToPair;

try {

mapToPair = 。Cdr

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

@Override

public Tuple2call(Tuple2t)

throws Exception {

//產(chǎn)生隨機(jī)前綴,隨機(jī)數(shù)大小看情況決定

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

//添加隨機(jī)數(shù)前綴

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

}

}).sortByKey()//進(jìn)行一個(gè)Shuffle操作打亂Key

//去掉隨機(jī)數(shù)前綴

.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數(shù)據(jù)傾斜簡單方法。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • RDD
    RDD
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    7964
  • 大數(shù)據(jù)
    +關(guān)注

    關(guān)注

    64

    文章

    8856

    瀏覽量

    137217
收藏 人收藏

    評論

    相關(guān)推薦

    大數(shù)據(jù)技術(shù)經(jīng)驗(yàn)交流 場景化數(shù)據(jù)算法

    可視化數(shù)據(jù)指導(dǎo),讓每一個(gè)人看懂大數(shù)據(jù);多場景數(shù)據(jù)算法,讓所有數(shù)據(jù)都有跡可循;大數(shù)據(jù)技術(shù)經(jīng)驗(yàn)交流群
    發(fā)表于 06-01 17:12

    常用大數(shù)據(jù)處理技術(shù)歸類

    “21世紀(jì)最缺的是什么?人才!”。在大數(shù)據(jù)發(fā)展如此之快的今天,大數(shù)據(jù)工程師已經(jīng)成為一個(gè)新興職業(yè)。大數(shù)據(jù)是信息技術(shù),是人和人、人和機(jī)器、機(jī)器和機(jī)器交互的內(nèi)容特征,是最底層的信息
    發(fā)表于 02-28 17:02

    如何從零學(xué)大數(shù)據(jù)?

    新如何學(xué)習(xí)大數(shù)據(jù)技術(shù)?大數(shù)據(jù)怎么入門?怎么做大數(shù)據(jù)分析?數(shù)據(jù)科學(xué)需要學(xué)習(xí)那些技術(shù)
    發(fā)表于 03-01 15:41

    常見大數(shù)據(jù)應(yīng)用有哪些?

    大數(shù)據(jù)技術(shù)為決策提供依據(jù),在***、企業(yè)、科研項(xiàng)目等決策中扮演著重要的角色,在社會治理和企業(yè)管理中起到了不容忽視的作用,很多國家,如中國、美國以及歐盟等都已將大數(shù)據(jù)列入國家發(fā)展戰(zhàn)略,微軟、谷歌、百度
    發(fā)表于 03-13 16:50

    大數(shù)據(jù)運(yùn)用的技術(shù)

    領(lǐng)域也有所應(yīng)用,主要可用于數(shù)據(jù)采集、數(shù)據(jù)分析以及數(shù)據(jù)可視化等,因此,大數(shù)據(jù)開發(fā)需學(xué)習(xí)一定的Python知識。只有完整的學(xué)完以上
    發(fā)表于 04-08 16:50

    大數(shù)據(jù)數(shù)據(jù)類型

    大數(shù)據(jù)不僅僅是一個(gè)數(shù)據(jù),它是大數(shù)據(jù)集的集合,不能使用傳統(tǒng)的計(jì)算技術(shù)來處理,宏觀上來講,它不僅包括需處理的數(shù)據(jù),還包括各種工具、
    發(fā)表于 05-11 15:57

    大數(shù)據(jù)開發(fā)核心技術(shù)詳解

    數(shù)據(jù)的核心是云技術(shù)和BI。關(guān)于大數(shù)據(jù)和云計(jì)算的關(guān)系人們通常會有誤解,而且也會把它們混起來說,分別做一句話直白解釋就是:云計(jì)算就是硬件資源的虛擬化;大數(shù)據(jù)就是海量
    發(fā)表于 07-26 16:26

    DKHadoop大數(shù)據(jù)開發(fā)框架的構(gòu)成模塊

    大數(shù)據(jù)的應(yīng)用開發(fā)太過偏向于底層,學(xué)習(xí)的難度不是一般的大,所涉及到的技術(shù)面廣太大,不是一般人所能夠駕馭得了的。市場上大部分打著hadoop國產(chǎn)發(fā)行版,也只是把國外的拿過來重新修改了一下而已。大快
    發(fā)表于 10-19 15:12

    大數(shù)據(jù)平臺開發(fā)公司有哪些?

    到大快搜索的名字腦海里的第一反應(yīng)是莫非又是一個(gè)像百度一樣做搜索引擎的公司。完全不是哦,這是一個(gè)開放的搜索和大數(shù)據(jù)技術(shù)平臺,提供開放的搜索、大數(shù)據(jù)和人工只能服務(wù)。大快主要是從事大數(shù)據(jù)
    發(fā)表于 11-15 15:17

    大數(shù)據(jù)應(yīng)用開發(fā)如何入門需要知道這些

    底層,它的學(xué)習(xí)難度之大真不是你三兩篇分享文章就能說的清楚的,它所涉及的技術(shù)層面太多廣泛,都在很大程度上制約了大數(shù)據(jù)的普及,不然大數(shù)據(jù)人才也不會如此稀少! 對于想要學(xué)習(xí)大數(shù)據(jù)
    發(fā)表于 11-26 14:49

    Hive中數(shù)據(jù)傾斜的原因和解

    Hive中數(shù)據(jù)傾斜解決實(shí)例
    發(fā)表于 06-21 16:48

    大數(shù)據(jù)的定義及其應(yīng)用

    目錄1、大數(shù)據(jù)概述1.1. 概述1.2. 大數(shù)據(jù)定義1.3. 大數(shù)據(jù)技術(shù)發(fā)展2、大數(shù)據(jù)應(yīng)用2.1. 大數(shù)
    發(fā)表于 07-12 06:12

    什么是大數(shù)據(jù)?大數(shù)據(jù)的特點(diǎn)有哪些

    大數(shù)據(jù)(big data)目錄1什么是大數(shù)據(jù)2大數(shù)據(jù)的定義3大數(shù)據(jù)的特點(diǎn)[1]4大數(shù)據(jù)的作用[2]5大數(shù)
    發(fā)表于 07-12 06:52

    大數(shù)據(jù)技術(shù)與應(yīng)用是學(xué)什么的?

    大數(shù)據(jù)技術(shù)與應(yīng)用是學(xué)什么的?大數(shù)據(jù)是指無法在一定時(shí)間內(nèi)用常規(guī)軟件工具對其內(nèi)容進(jìn)行抓取、管理和處理的數(shù)據(jù)集合。大數(shù)據(jù)
    發(fā)表于 07-27 07:47

    領(lǐng)域大數(shù)據(jù)應(yīng)用開發(fā)與運(yùn)行平臺技術(shù)研究

    隨著大數(shù)據(jù)技術(shù)在不同領(lǐng)域的快速應(yīng)用,構(gòu)建大數(shù)據(jù)應(yīng)用系統(tǒng)的開發(fā)與運(yùn)行一體化平臺,降低大數(shù)據(jù)技術(shù)在各
    發(fā)表于 12-28 14:28 ?0次下載
    領(lǐng)域<b class='flag-5'>大數(shù)據(jù)</b>應(yīng)用<b class='flag-5'>開發(fā)</b>與運(yùn)行平臺<b class='flag-5'>技術(shù)</b>研究