KNN在MR和Spark下實現的IO操作比較

2021-08-25 11:18:47 字數 1121 閱讀 8262

mapreduce中knn執行過程i/o操作分析:

實現流程:

knn在mapreduce中的實現,認為訓練集大小遠大於測試集大小。所以測試集快取在記憶體中。

map任務輸入是乙個訓練集檔案的分片(子集),測試集中的每乙個樣例與訓練集分片中的所有樣例計算距離,輸出《測試樣例, (與訓練樣例的距離和訓練樣例的類別)>

combiner階段根據map的輸出得到距測試樣例最近的k個訓練樣例,並輸出。

reduce任務:根據輸入得到距測試樣例最近的k個訓練樣例,並按投票原則得到對應的類別,輸出到hdfs。

通過上述knn在mapreduce中的流程分析產生的i/o操作的數量,分析i/o操作其實主要就是分析shuffle階段的操作,具體分析如下:

1.首先map端,map任務從hdfs中讀取資料分片產生一次讀操作。

2.當map函式處理完成每一條輸入產生輸出時,會將輸出寫入到乙個預設大小為100m的緩衝區,當緩衝區的資料大小達到閾值(預設為緩衝區大小的80%),便會將緩衝區中的資料溢寫到磁碟中,這個過程產生一次寫操作。

3.上述過程會產生大量的溢寫的小檔案,map任務會將這些檔案進行合併,在合併前會呼叫combiner函式,以減少寫到磁碟的資料。這個過程產生一次讀和寫操作。

4.reduce端的輸入是若干map任務的map輸出,所以在每個map任務完成時,就複製其輸出到

reduce端

本地磁碟

。該過程會產生一次讀和寫操作。

5.最後在reduce階段,直接把資料輸入到reduce函式,產生一次讀操作。reduce函式對資料進行處理得到的輸出直接寫到hdfs中,產生一次寫操作。

綜上所述,knn在mapreduce中的實現

至少有4次讀操作和4次寫操作。

knn在spark中i/o操作分析:

由於spark是基於記憶體的計算,所有的計算都在記憶體中進行。所以通常情況下,spark任務都只有兩次i/o操作,一次是讀取資料形成rdd,一次是將計算的結果寫入檔案系統(hdfs)。

中間的操作都是在記憶體中進行的。但是如果有shuffle操作且記憶體不足以容納所有的資料就可能會有i/o操作,在knn的實現過程中,會有一次shuffle操作,所以可能會有一次讀和寫操作。綜述,knn在spark中的實現至多會有兩次讀和兩次寫操作,最少會有一次讀和一次寫操作。

Spark和MR的區別

spark把運算的中間資料存放在記憶體,迭代計算效率更高 mr的中間結果需要落地,需要儲存到磁碟,這樣必然會有磁碟io操作,影響效能 spark容錯性高,它通過彈性分布式資料集rdd來實現高效容錯,rdd是一組分布式的儲存在節點記憶體中的唯讀性質的資料集,這些集合石彈性的,某一部分丟失或者出錯,可以...

spark框架體系及spark和MR的區別

2019 12 11 spark的框架體系 三個核心元件 sparkcore sparksql sparkstreaming spark有三種部署模式 stanalone yarn messos spark和mapreduce之間區別 1.spark把運算中資料放到記憶體中,迭代計算效率會更高 mr...

Spark的shuffle和mr的區別?

問題分析 對hadoop和spark的shullfe過程理解不透徹 問題解答 mr的shuffle mapshuffle 資料存到hdfs中是以塊進行儲存的,每乙個塊對應乙個分片,maptask就是從分片中獲取資料的 在某個節點上啟動了maptask,maptask讀取是通過k v來讀取的,讀取的資...