
文章插圖
spark作為現(xiàn)在主流的分布式計算框架 , 已經(jīng)融入到了很多的產(chǎn)品中作為ETL的解決方案 。而我們?nèi)绻胍y試這樣的產(chǎn)品就要對分布式計算的原理有個清晰的認(rèn)知并且也要熟悉分布式計算框架的使用來針對各種ETL場景設(shè)計不同的測試數(shù)據(jù) 。而一般來說我們需要從以下兩個角度來進(jìn)行測試 。
· ETL能兼容各種不同的數(shù)據(jù)(不同的數(shù)據(jù)規(guī)模 , 數(shù)據(jù)分布和數(shù)據(jù)類型)
· ETL處理數(shù)據(jù)的正確性
測試數(shù)據(jù)兼容
ETL是按一定規(guī)則針對數(shù)據(jù)進(jìn)行清洗 , 抽取 , 轉(zhuǎn)換等一系列操作的簡寫 。那么一般來說他要能夠處理很多種不同的數(shù)據(jù)類型 。我們在生產(chǎn)上遇見的bug有很大一部分占比是生產(chǎn)環(huán)境遇到了比較極端的數(shù)據(jù)導(dǎo)致我們的ETL程序無法處理 。比如:
數(shù)據(jù)擁有大量分片
在分布式計算中 , 一份數(shù)據(jù)是由多個散落在HDFS上的文件組成的 , 這些文件可能散落在不同的機(jī)器上 , 只不過HDFS會給使用者一個統(tǒng)一的視圖 , 讓使用者以為自己在操作的是一個文件 , 而不是很多個文件 。這是HDFS這種分布式文件系統(tǒng)的存儲方式 。而各種分布式計算框架 , 比如hadoop的MapReduce , 或者是spark 。就會利用這種特性 , 直接讀取散落在各個機(jī)器上文件并保存在那個節(jié)點的內(nèi)存中(理想狀態(tài)下 , 如果資源不夠可能還是會發(fā)生數(shù)據(jù)在節(jié)點間遷移) 。而讀取到內(nèi)存中的數(shù)據(jù)也是分片的(partition) 。spark默認(rèn)以128M為單位讀取數(shù)據(jù) , 如果數(shù)據(jù)小于這個值會按一個分片存儲 , 如果大于這個值就繼續(xù)往上增長分片 。比如一個文件的大小是130M , spark讀取它的時候會在內(nèi)存中分成兩個partition(1個128M , 1個2M) 。如果這個文件特別小 , 只有10M , 那它也會被當(dāng)做一個partition存在內(nèi)存中 。所以如果一份數(shù)據(jù)存放在HDFS中 , 這個數(shù)據(jù)是由10個散落在各個節(jié)點的文件組成的 。那么spark在讀取的時候 , 就會至少在內(nèi)存中有10個partition , 如果每個文件的大小都超過了128M , partition的數(shù)量會繼續(xù)增加 。
而在執(zhí)行計算的時候 , 這些存儲在多個節(jié)點內(nèi)存中的數(shù)據(jù)會并發(fā)的執(zhí)行數(shù)據(jù)計算任務(wù) 。也就是說我們的數(shù)據(jù)是存放在多個節(jié)點中的內(nèi)存中的 , 我們?yōu)槊恳粋€partition都執(zhí)行一個計算任務(wù) 。所以我們針對一個特別大的數(shù)據(jù)的計算任務(wù) , 會首先把數(shù)據(jù)按partition讀取到不同節(jié)點的不同的內(nèi)存中 , 也就是把數(shù)據(jù)拆分成很多小的分片放在不同機(jī)器的內(nèi)存中 。然后分別在這些小的分片上執(zhí)行計算任務(wù) 。最后再聚合每個計算任務(wù)的結(jié)果 。這就是分布式計算的基本原理 。
那么這個時候問題就來了 , 這種按partition為單位的分布式計算框架 。partition的數(shù)量決定著并發(fā)的數(shù)量 ??梢岳斫鉃?nbsp;, 如果數(shù)據(jù)有100個partition , 就會有100個線程針對這份數(shù)據(jù)做計算任務(wù) 。所以partition的數(shù)量代表著計算的并行程度 。但是不是說partition越多越好 , 如果明明數(shù)據(jù)就很小 , 我們卻拆分了大量的partition的話 , 反而是比較慢的 。而且所有分片的計算結(jié)果最后是要聚合在一個地方的 。這些都會造成網(wǎng)絡(luò)IO的開銷(因為數(shù)據(jù)是在不同的節(jié)點之前傳輸?shù)? 。尤其是在分布式計算中 , 我們有shuffle這個性能殺手(不熟悉這個概念的同學(xué)請看我之前的文章) 。在大量的分片下執(zhí)行shuffle將會是一個災(zāi)難 , 因為大量的網(wǎng)絡(luò)IO會導(dǎo)致集群處于很高的負(fù)載甚至癱瘓 。我們曾經(jīng)碰見過只有500M但是卻有7000個分片的數(shù)據(jù) , 那一次的結(jié)果是針對這個數(shù)據(jù)并行執(zhí)行了多個ETL程序后 , 整個hadoop集群癱瘓了 。這是在數(shù)據(jù)預(yù)處理的時候忘記做reparation(重新分片)的結(jié)果 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 男人如何處理婆媳關(guān)系 聰明男人處理婆媳關(guān)系
- 目前最好的cpu排名 電腦cpu處理器最新排名
- iphone手機(jī)丟失解決措施 蘋果手機(jī)被盜怎么找回處理
- 該如何處理婆媳關(guān)系 怎么解決婆媳關(guān)系
- 老婆出軌了該怎么處理才是最好的 出軌的婚姻能撐多久
- 老婆外遇怎樣處理 怎樣處理老婆出軌的情況
- ?老公外遇怎么處理 老公有外遇怎么辦
- 老公出軌后的真實心理 男人出軌后女人錯誤的處理方法
- 二婚夫妻怎么處理財務(wù)問題 二婚夫妻誰管錢好
- ubuntu上不了網(wǎng)處理方法 ubuntu上不了網(wǎng)怎么辦
