hadoop:
在mapreduce中,步驟包括map,shuffle,reduce,其中combine和partition是函式。combine作用是將map後產生的鍵值對中,相同key的合併,產生新的鍵值對作為reduce的輸入。而partition的作用是根據key將鍵值對劃分給對應的reduce。shuffle包括combine和partition。
kvbuffer環在到達臨界資料後,會從剩餘空間的中間位置作為起始位置進行資料安放
merge過程中會產生乙個file.out和file.out.index來儲存最終輸出和索引
spark:
有些任務之間資料流轉不需要通過shuffle,但是有些任務之間還是需要通過shuffle來傳遞資料,比如wide dependency的group by key。
spark中需要shuffle 輸出的map任務會為每個reduce建立對應的bucket,map產生的結果會根據設定的partitioner得到對應的bucketid,然後填 充到相應的bucket中去。每個map的輸出結果可能包含所有的reduce所需要的資料,所以每個map會建立r個bucket(r是reduce的 個數),m個map總共會建立m*r個bucket。這種shuffle是可以被優化。
mapreduce
spark
collect
在記憶體中構造了一塊資料結構用於map輸出的緩衝
沒有在記憶體中構造一塊資料結構用於map輸出的緩衝,而是直接把輸出寫到磁碟檔案
sort
map輸出的資料有排序
map輸出的資料沒有排序
merge
對磁碟上的多個spill檔案最後進行合併成乙個輸出檔案
在map端沒有merge過程,在輸出時直接是對應乙個reduce的資料寫到乙個檔案中,這些檔案同時存在併發寫,最後合併成乙個
copy框架
jetty
netty或者直接socket流
對於本節點上的檔案
仍然是通過網路框架拖取資料
不通過網路框架,對於在本節點上的map輸出檔案,採用本地讀取的方式
copy過來的資料存放位置
先放在記憶體,記憶體放不下時寫到磁碟
一種方式全部放在記憶體;
另一種方式先放在記憶體
merge sort
最後會對磁碟檔案和記憶體中的資料進行合併排序
對於採用另一種方式時也會有合併排序的過程
Hadoop 和 Spark 的異同
談到大資料,相信大家對hadoop和apache spark這兩個名字並不陌生。但我們往往對它們的理解只是提留在字面上,並沒有對它們進行深入的思考,下面不妨跟我一塊看下它們究竟有什麼異同。首先,hadoop和apache spark兩者都是大資料框架,但是各自存在的目的不盡相同。hadoop實質上更...
hadoop和spark的異同
解決問題的層面不一樣 首先,hadoop和apache spark兩者都是大資料框架,但是各自存在的目的不盡相同。hadoop實質上更多是乙個分布式資料基礎設施 它將巨大的資料集分派到乙個由普通計算機組成的集群中的多個節點進行儲存,意味著您不需要購買和維護昂貴的伺服器硬體。同時,hadoop還會索引...
Hadoop和Spark的異同
談到大資料,相信大家對hadoop和apache spark這兩個名字並不陌生。但我們往往對它們的理解只是提留在字面上,並沒有對它們進行深入的思考,下面不妨跟我一塊看下它們究竟有什麼異同。解決問題的層面不一樣 首先,hadoop和apache spark兩者都是大資料框架,但是各自存在的目的不盡相同...