亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

spark處理超大文件方法 spark讀取hdfs文件規(guī)則


spark處理超大文件方法 spark讀取hdfs文件規(guī)則

文章插圖
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)容,希望對您有所幫助: