Facebook的Cosco Shuffle算法類似社區(qū)當(dāng)前的https://issues.apache.org/jira/browse/SPARK-25299
思路(remote shuffle service)榆芦,但SPARK-25299只是針對(duì)SortShuffleManager算法實(shí)現(xiàn)的,Cosco Shuffle算法是一種完全Shuffle分離的實(shí)現(xiàn)( fully disaggregated shuffle implementations)喘鸟。當(dāng)前facebook的同學(xué)也正在嘗試著想將這部分的實(shí)現(xiàn)合入到社區(qū)中匆绣。
背景及現(xiàn)狀分析
- 在存儲(chǔ)、計(jì)算分離的架構(gòu)實(shí)現(xiàn)中什黑,磁盤(pán)存儲(chǔ)很容易成為性能的瓶頸:
- Small IO size: 小文件問(wèn)題導(dǎo)致需要多次seek(IO)崎淳,進(jìn)而影響到吞吐量;
- 而為了改進(jìn)該問(wèn)題愕把,有兩種途徑:
- 增大交互IO大小以提升整體吞吐量: 優(yōu)化shuffle算法避免小文件讀寫(xiě)拣凹;
- Read/Write更少的數(shù)據(jù)減少吞吐需求:減少讀寫(xiě)放大森爽;
下圖就展示了讀寫(xiě)IO大小對(duì)整體吞吐的影響:
屏幕快照 2019-11-17 23.15.29.png
Cosco Shuffle的實(shí)現(xiàn)
- Mappers: 每個(gè)partition共享一個(gè)Write-Ahead Buffer(根據(jù)需求是否排序,這個(gè)是在remote shuffle實(shí)現(xiàn)的)嚣镜;
- Reducers: 順序讀取shuffle數(shù)據(jù)爬迟;
這樣帶來(lái)的好處有:
- 增大IO文件大小: 從IO平均大小200KB->2.5MB菊匿;
- 解決寫(xiě)放大問(wèn)題: 3x -> 1.2x雕旨;
屏幕快照 2019-11-17 23.24.42.png
方案設(shè)計(jì)
- 在mappers/reduers之間增加了cosco中間服務(wù)(類似于remote shuffle service)的實(shí)現(xiàn);
- Cosco is based on the idea of partial in-memory aggregation across a shared pool of distributed memory. This provides vastly improved efficiency in disk usage compared to Spark’s built-in shuffle.捧请;
- 同時(shí)Cosco是內(nèi)存設(shè)計(jì)的凡涩,極大地提供了shuffle性能;
- 而在shuffle數(shù)據(jù)的寫(xiě)入時(shí)決定是否排序疹蛉,減少在reduce的時(shí)候排序(依賴reduce的迭代器的優(yōu)化活箕,基于歸并排序的方法),來(lái)減少讀寫(xiě)放大可款;
屏幕快照 2019-11-17 23.28.49.png