作者 | 一錘、明濟、紫槿來源 | 阿裡技術公衆号
阿裡雲EMR自2020年推出Remote Shuffle Service(RSS)以來,幫助了諸多客戶解決Spark作業的性能、穩定性問題,并使得存算分離架構得以實施,與此同時RSS也在跟合作方小米的共建下不斷演進。本文将介紹RSS的最新架構,在小米的實踐,以及開源。
一 問題回顧Shuffle是大數據計算中最為重要的算子。首先,覆蓋率高,超過50%的作業都包含至少一個Shuffle[2]。其次,資源消耗大,阿裡内部平台Shuffle的CPU占比超過20%,LinkedIn内部Shuffle Read導緻的資源浪費高達15%[1],單Shuffle數據量超100T[2]。第三,不穩定,硬件資源的穩定性CPU>内存>磁盤≈網絡,而Shuffle的資源消耗是倒序。OutOfMemory和Fetch Failure可能是Spark作業最常見的兩種錯誤,前者可以通過調參解決,而後者需要系統性重構Shuffle。
傳統Shuffle如下圖所示,Mapper把Shuffle數據按PartitionId排序寫盤後交給External Shuffle Service(ESS)管理,Reducer從每個Mapper Output中讀取屬于自己的Block。
傳統Shuffle存在以下問題。
針對Shuffle的問題,工業界嘗試了各種方法,近兩年逐漸收斂到Push Shuffle的方案。
1 SailfishSailfish3最早提出Push Shuffle Partition數據聚合的方法,對大作業有20%-5倍的性能提升。Sailfish魔改了分布式文件系統KFS[4],不支持多副本。
2 DataflowGoolge BigQuery和Cloud Dataflow5實現了Shuffle跟計算的解耦,采用多層存儲(内存 磁盤),除此之外沒有披露更多技術細節。
3 RiffleFacebook Riffle2采用了在Mapper端Merge的方法,物理節點上部署的Riffle服務負責把此節點上的Shuffle數據按照PartitionId做Merge,從而一定程度把小粒度的随機讀合并成較大粒度。
4 CoscoFacebook Cosco[6]7采用了Sailfish的方法并做了重設計,保留了Push Shuffle Parititon數據聚合的核心方法,但使用了獨立服務。服務端采用Master-Worker架構,使用内存兩副本,用DFS做持久化。Cosco基本上定義了RSS的标準架構,但受到DFS的拖累,性能上并沒有顯著提升。
5 ZeusUber Zeus[8]9同樣采用了去中心化的服務架構,但沒有類似etcd的角色維護Worker狀态,因此難以做狀态管理。Zeus通過Client雙推的方式做多副本,采用本地存儲。
6 RPMPIntel RPMP10依靠RDMA和PMEM的新硬件來加速Shuffle,并沒有做數據聚合。
7 MagnetLinkedIn Magnet1融合了本地Shuffle Push Shuffle,其設計哲學是"盡力而為",Mapper的Output寫完本地後,Push線程會把數據推給遠端的ESS做聚合,且不保證所有數據都會聚合。受益于本地Shuffle,Magnet在容錯和AE的支持上的表現更好(直接FallbACK到傳統Shuffle)。Magnet的局限包括依賴本地盤,不支持存算分離;數據合并依賴ESS,對NodeManager造成額外壓力;Shuffle Write同時寫本地和遠端,性能達不到最優。Magnet方案已經被Apache Spark接納,成為默認的開源方案。
8 FireStormFireStorm11混合了Cosco和Zeus的設計,服務端采用Master-Worker架構,通過Client多寫實現多副本。FireStorm使用了本地盤 對象存儲的多層存儲,采用較大的PushBlock(默認3M)。FireStorm在存儲端保留了PushBlock的元信息,并記錄在索引文件中。FireStorm的Client緩存數據的内存由Spark MemoryManager進行管理,并通過細顆粒度的内存分配(默認3K)來盡量避免内存浪費。
從上述描述可知,當前的方案基本收斂到Push Shuffle,但在一些關鍵設計上的選擇各家不盡相同,主要體現在:
阿裡雲RSS12由2020年推出,核心設計參考了Sailfish和Cosco,并且在架構和實現層面做了改良,下文将詳細介紹。
三 阿裡雲RSS核心架構針對上一節的關鍵設計,阿裡雲RSS的選擇如下:
下圖展示了阿裡雲RSS的關鍵架構,包含Client(RSS Client, Meta Service),Master(Resource Manager)和Worker三個角色。Shuffle的過程如下:
點擊鍊接查看原文阿裡雲EMR Remote Shuffle Service在小米的實踐,關注公衆号【阿裡技術】獲取更多福利!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!