資料介紹
什么是數(shù)據(jù)傾斜?
對(duì) Spark/Hadoop 這樣的分布式大數(shù)據(jù)系統(tǒng)來(lái)講,數(shù)據(jù)量大并不可怕,可怕的是數(shù)據(jù)傾斜。
對(duì)于分布式系統(tǒng)而言,理想情況下,隨著系統(tǒng)規(guī)模(節(jié)點(diǎn)數(shù)量)的增加,應(yīng)用整體耗時(shí)線(xiàn)性下降。如果一臺(tái)機(jī)器處理一批大量數(shù)據(jù)需要 120 分鐘,當(dāng)機(jī)器數(shù)量增加到 3 臺(tái)時(shí),理想的耗時(shí)為 120 / 3 = 40 分鐘。但是,想做到分布式情況下每臺(tái)機(jī)器執(zhí)行時(shí)間是單機(jī)時(shí)的1 / N,就必須保證每臺(tái)機(jī)器的任務(wù)量相等。不幸的是,很多時(shí)候,任務(wù)的分配是不均勻的,甚至不均勻到大部分任務(wù)被分配到個(gè)別機(jī)器上,其它大部分機(jī)器所分配的任務(wù)量只占總量的小部分。比如一臺(tái)機(jī)器負(fù)責(zé)處理 80% 的任務(wù),另外兩臺(tái)機(jī)器各處理 10% 的任務(wù)。
『不患多而患不均』,這是分布式計(jì)算環(huán)境下最大的問(wèn)題。意味著計(jì)算能力不是線(xiàn)性擴(kuò)展的,而是存在短板效應(yīng): 一個(gè) Stage 所耗費(fèi)的時(shí)間,是由最慢的那個(gè) Task 決定。
由于同一個(gè) Stage 內(nèi)的所有 task 執(zhí)行相同的計(jì)算,在排除不同計(jì)算節(jié)點(diǎn)計(jì)算能力差異的前提下,不同 task 之間耗時(shí)的差異主要由該 task 所處理的數(shù)據(jù)量決定。所以,要想發(fā)揮分布式系統(tǒng)并行計(jì)算的優(yōu)勢(shì),就必須解決數(shù)據(jù)傾斜問(wèn)題。

數(shù)據(jù)傾斜的危害
當(dāng)出現(xiàn)數(shù)據(jù)傾斜時(shí),小量任務(wù)耗時(shí)遠(yuǎn)高于其它任務(wù),從而使得整體耗時(shí)過(guò)大,未能充分發(fā)揮分布式系統(tǒng)的并行計(jì)算優(yōu)勢(shì)。
另外,當(dāng)發(fā)生數(shù)據(jù)傾斜時(shí),部分任務(wù)處理的數(shù)據(jù)量過(guò)大,可能造成內(nèi)存不足使得任務(wù)失敗,并進(jìn)而引進(jìn)整個(gè)應(yīng)用失敗。
數(shù)據(jù)傾斜的現(xiàn)象
當(dāng)發(fā)現(xiàn)如下現(xiàn)象時(shí),十有八九是發(fā)生數(shù)據(jù)傾斜了:
絕大多數(shù) task 執(zhí)行得都非???,但個(gè)別 task 執(zhí)行極慢,整體任務(wù)卡在某個(gè)階段不能結(jié)束。
原本能夠正常執(zhí)行的 Spark 作業(yè),某天突然報(bào)出 OOM(內(nèi)存溢出)異常,觀(guān)察異常棧,是我們寫(xiě)的業(yè)務(wù)代碼造成的。這種情況比較少見(jiàn)。
TIPS:
在 Spark streaming 程序中,數(shù)據(jù)傾斜更容易出現(xiàn),特別是在程序中包含一些類(lèi)似 sql 的 join、group 這種操作的時(shí)候。因?yàn)?Spark Streaming 程序在運(yùn)行的時(shí)候,我們一般不會(huì)分配特別多的內(nèi)存,因此一旦在這個(gè)過(guò)程中出現(xiàn)一些數(shù)據(jù)傾斜,就十分容易造成 OOM。
數(shù)據(jù)傾斜的原因
在進(jìn)行 shuffle 的時(shí)候,必須將各個(gè)節(jié)點(diǎn)上相同的 key 拉取到某個(gè)節(jié)點(diǎn)上的一個(gè) task 來(lái)進(jìn)行處理,比如按照 key 進(jìn)行聚合或 join 等操作。此時(shí)如果某個(gè) key 對(duì)應(yīng)的數(shù)據(jù)量特別大的話(huà),就會(huì)發(fā)生數(shù)據(jù)傾斜。比如大部分 key 對(duì)應(yīng)10條數(shù)據(jù),但是個(gè)別 key 卻對(duì)應(yīng)了100萬(wàn)條數(shù)據(jù),那么大部分 task 可能就只會(huì)分配到10條數(shù)據(jù),然后1秒鐘就運(yùn)行完了;但是個(gè)別 task 可能分配到了100萬(wàn)數(shù)據(jù),要運(yùn)行一兩個(gè)小時(shí)。
因此出現(xiàn)數(shù)據(jù)傾斜的時(shí)候,Spark 作業(yè)看起來(lái)會(huì)運(yùn)行得非常緩慢,甚至可能因?yàn)槟硞€(gè) task 處理的數(shù)據(jù)量過(guò)大導(dǎo)致內(nèi)存溢出。
- Linux的內(nèi)核定制方法詳細(xì)說(shuō)明 22次下載
- Linux的內(nèi)核定制方法詳細(xì)說(shuō)明 4次下載
- 如何使用Python繪制PDF文件教程詳細(xì)說(shuō)明 12次下載
- ABB報(bào)警代碼及處理方法詳細(xì)說(shuō)明 3次下載
- 西門(mén)子PLC培訓(xùn)資料之數(shù)據(jù)塊中的數(shù)據(jù)存儲(chǔ)詳細(xì)說(shuō)明 15次下載
- RTD系列板卡升級(jí)操作方法詳細(xì)說(shuō)明 8次下載
- 提高LabVIEW開(kāi)發(fā)速度的方法有哪些25個(gè)技巧詳細(xì)說(shuō)明 20次下載
- 測(cè)試比較四種Arduino Nano全新型號(hào)的數(shù)據(jù)詳細(xì)說(shuō)明 25次下載
- 5種數(shù)據(jù)庫(kù)的SQL語(yǔ)句大全詳細(xì)說(shuō)明 8次下載
- 使用SQL語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)的實(shí)例詳細(xì)說(shuō)明 19次下載
- SQL的常用命令使用方法詳細(xì)說(shuō)明 12次下載
- 機(jī)器視覺(jué)系統(tǒng)的三種應(yīng)用案例詳細(xì)說(shuō)明 24次下載
- 51單片機(jī)無(wú)法燒錄程序應(yīng)該如何解決詳細(xì)方法說(shuō)明
- PHP八種變量類(lèi)型的詳細(xì)資料說(shuō)明 7次下載
- 八種常見(jiàn)汽車(chē)懸掛系統(tǒng)詳細(xì)說(shuō)明 17次下載
- 如何在DGX Spark上運(yùn)行NVIDIA Omniverse 335次閱讀
- 瑞芯微rv1106開(kāi)發(fā)資料 rv1106數(shù)據(jù)手冊(cè) rv1106詳細(xì)說(shuō)明書(shū)免費(fèi)下載 4.8k次閱讀
- PIC系列單片機(jī)程序設(shè)計(jì)基礎(chǔ)知識(shí)詳細(xì)說(shuō)明 5.5k次閱讀
- C語(yǔ)言和C++的特點(diǎn)與用法詳細(xì)說(shuō)明 5.3k次閱讀
- FPGA的入門(mén)基礎(chǔ)知識(shí)詳細(xì)說(shuō)明 1.1w次閱讀
- 使用AT89S51單片機(jī)制作紅外遙控器的資料和源代碼詳細(xì)說(shuō)明 7.1k次閱讀
- 電腦無(wú)法識(shí)別U盤(pán)應(yīng)該如何解決詳細(xì)方法說(shuō)明 1.4w次閱讀
- 常用穩(wěn)壓二極管的參數(shù)表格詳細(xì)說(shuō)明 2w次閱讀
- 電氣電纜的最全常用手冊(cè)詳細(xì)說(shuō)明 1w次閱讀
- 機(jī)器學(xué)習(xí)實(shí)例:Spark與Python結(jié)合設(shè)計(jì) 3.1k次閱讀
- 一文讀懂 Spark 內(nèi)存管理 1.3k次閱讀
- 詳細(xì)putty串口使用教程與八大使用技巧分享 7.9w次閱讀
- 接收卡升級(jí)的詳細(xì)說(shuō)明概述圖文詳解 2.7w次閱讀
- 基于AD9854產(chǎn)生MSK調(diào)制信號(hào)詳細(xì)說(shuō)明 7.2k次閱讀
- 音響功放接線(xiàn)圖解及詳細(xì)說(shuō)明 96.9w次閱讀
下載排行
本周
- 1PD取電芯片 ECP5702規(guī)格書(shū)
- 0.88 MB | 3次下載 | 免費(fèi)
- 2氮化鎵GaN FET/GaN HEMT 功率驅(qū)動(dòng)電路選型表
- 0.10 MB | 2次下載 | 免費(fèi)
- 3EMC PCB設(shè)計(jì)總結(jié)
- 0.33 MB | 2次下載 | 免費(fèi)
- 41節(jié)電池用電池保護(hù)IC S-8261D系列數(shù)據(jù)手冊(cè)
- 3.07 MB | 1次下載 | 1 積分
- 5PD取電芯片,可取5/9/12/15/20V電壓ECP5702數(shù)據(jù)手冊(cè)
- 0.88 MB | 1次下載 | 免費(fèi)
- 6飛騰FT2000-4 COM Express核心板技術(shù)手冊(cè)0603
- 1.22 MB | 1次下載 | 免費(fèi)
- 7飛騰S5000C-64雙路服務(wù)器系列應(yīng)用宣傳冊(cè)--一乘科技
- 945.81 KB | 1次下載 | 免費(fèi)
- 8IP2345支持PD3.0等多種快充協(xié)議 支持4~6節(jié)串聯(lián)電池最大充電功率30W異步升降壓充電IC
- 1.41 MB | 次下載 | 免費(fèi)
本月
- 1美的電磁爐電路原理圖資料
- 4.39 MB | 22次下載 | 10 積分
- 2反激式開(kāi)關(guān)電源設(shè)計(jì)解析
- 0.89 MB | 16次下載 | 5 積分
- 3耗盡型MOS FET產(chǎn)品目錄選型表
- 0.14 MB | 3次下載 | 免費(fèi)
- 4PD取電芯片 ECP5702規(guī)格書(shū)
- 0.88 MB | 3次下載 | 免費(fèi)
- 5氮化鎵GaN FET/GaN HEMT 功率驅(qū)動(dòng)電路選型表
- 0.10 MB | 2次下載 | 免費(fèi)
- 6EMC PCB設(shè)計(jì)總結(jié)
- 0.33 MB | 2次下載 | 免費(fèi)
- 7PC5200 700V_10A GaN HEMT驅(qū)動(dòng)器數(shù)據(jù)手冊(cè)
- 1.63 MB | 1次下載 | 免費(fèi)
- 81節(jié)電池用電池保護(hù)IC S-8261D系列數(shù)據(jù)手冊(cè)
- 3.07 MB | 1次下載 | 1 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233095次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191457次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183360次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81605次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73831次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問(wèn)
發(fā)資料
發(fā)視頻
上傳資料賺積分
評(píng)論