2015-1-25 13:18| 發布者: joejoe0332
| 檢視: 466
摘要: 區別常見的embarrassingly parallel系統,類似mapreduce和apache spark(apache hadoop的下一代資料處理引擎)這樣的計算引擎主要區別在於對「all-to-all」 操作的支援上。和許多分布式引擎一樣,mapreduce和spark的 ...
cloudera和英特爾公司的工程師們正在通力合作,旨在使spark shuffle階段具有更高的可擴充套件性和穩定性。本文對相關方法的設計進行了詳細描述。
區別常見的embarrassingly parallel系統,類似mapreduce和apache spark(apache hadoop的下一代資料處理引擎)這樣的計算引擎主要區別在於對「all-to-all」 操作的支援上。和許多分布式引擎一樣,mapreduce和spark的操作通常針對的是被分片資料集的子分片,很多操作每次只處理單個資料節點,同時這些操作所涉及到的資料往往都只存在於這個資料片內。all-to-all操作必須將資料集看作乙個整體,而每個輸出結果都可以總結自不同分片上的記錄。spark的groupbykey、sortbykey,還有reducebykey這些shuffle功能都屬於這方面常見的操作。
在這些分布式計算引擎中,shuffle指的是在乙個all-to-all操作中將資料再分割和聚合的操作。顯而易見,在實踐生產中,我們在spark部署時所發現的大多效能、可擴充套件性及穩定性問題都是在shuffle過程中產生的。
cloudera和英特爾的工程師們正通力合作以擴充套件spark的shuffle,使得shuffle可以更加快速與穩定地處理大量的資料集。spark在很多方面相較mapreduce有更多優勢,同時又在穩定性與可擴充套件性上相差無幾。在此,我們從久經考驗的mapreduce shuffle部署中吸取經驗,以提高排序資料輸出的shuffle效能。
在本文中,我們將會逐層解析——介紹目前spark shuffle的運作實現模式,提出修改建議,並對效能的提高方式進行分析。更多的工作進展可以於正在進行中的spark-2926發現。
乙個shuffle包含兩組任務:1. 產生shuffle資料的階段;2.使用shuffle資料的階段。鑑於歷史原因,寫入資料的任務被稱做「map task」,而讀取資料的任務被稱做「reduce tasks」,但是以上角色分配只侷限於單個job的某個具體shuffle過程中。在乙個shuffle中扮演reduce的task,在另乙個shuffle中可能就是map了,因為它在前者裡面執行的是讀取操作,而在後者中執行的是資料寫入任務,並在隨後的階段中被消費。
mapreduce和spark的shuffle都使用到了「pull」模式。在每個map任務中,資料被寫入本地磁碟,然後在reduce任務中會遠端請求讀取這些資料。由於shuffle使用的是all-to-all模式,任何map任務輸出的記錄組都可能用於任意reduce。乙個job在map時的shuffle操作基於以下原則:所有用於同乙個reduce操作的結果都會被寫入到相鄰的組別中,以便獲取資料時更為簡單。
spark預設的shuffle實現(即hash-based shuffle)是map階段為每個reduce任務單獨開啟乙個檔案,這種操作勝在簡單,但實際中卻有一些問題,比如說實現時spark必須維持大量的記憶體消耗,或者造成大量的隨機磁碟i/o。此外,如果m和r分別代表著乙個shuffle操作中的map和reduce數量,則hash-based shuffle需要產生總共m*r個數量的臨時檔案,shuffle consolidation將這個數量減至c*r個(這裡的c代表的是同時能夠執行的map任務數量),但即便是經過這樣的修改之後,在執行的reducer數量過多時還是經常會出現「檔案開啟過多」的限制。
hash-based shuffle中單個map任務
sort-based shuffle中單個map任務
為了進一步提高shuffle的穩定性與效能,從1.1版本開始,spark引入了「sort-based shuffle」實現,其功能與mapreduce使用的map方式十分類似。在部署時,每個任務的map輸出結果都會被儲存在記憶體裡(直到可用記憶體耗盡),然後在reduce任務中進行排序,之後再spill到乙個單獨的檔案。如果在單個任務中該操作發生了多次,那麼這個任務的輸出將被合併。
Apache Spark 入門知識
目錄spark sql 阿里雲emp架構 spark的總體執行流程 程式 在driver段執行 通過cluster manager 如yarn等 申請到硬體資源 任務排程至executor中執行 rdd dataframe dataset之間的關係不是更新換代,它們用於解決不同的問題,各有各的用處 ...
Apache Spark集群模式選擇
2019獨角獸企業重金招聘python工程師標準 standalone是最容易搭建的模式,在只執行spark的情況下,standalone提供了跟其他兩種模式差不多的特性。所以如果在只執行spark,並且spark集群節點小於100的情況下,可以選擇standalone模式。如果已經使用docker...
Apache Spark機器學習3 8 小結
3.8 小結 本章,我們一步一步實現了從資料到商業的整體檢視,通過這個過程我們在 spark 上處理了大量的資料,並且為 ifs公司建立了乙個生成銷售團隊成功的整體檢視的模型。具體來講,首先我們在準備好spark計算環境和載入預處理資料之後,為每個商業需求選擇了模型。第二,我們準備並約減了特徵。第三...