ESS(EMR Remote Shuffle Service)是E-MapReduce(簡稱EMR)在最佳化計算引擎的Shuffle操作上,推出的向外延展群組件。
背景資訊
目前Shuffle方案缺點如下:
Shuffle Write在巨量資料量情境下會溢出,導致寫放大。
Shuffle Read過程中有大量的網路小包導致Connection reset問題。
Shuffle Read過程中存在大量小資料量的IO請求和隨機讀,對磁碟和CPU造成高負載。
對於M*N次的串連數,在M和N數千的規模下,作業基本無法完成。
NodeManager和Spark Shuffle Service是同一進程,當Shuffle的資料量特別大時,通常會導致NodeManager重啟,從而影響YARN調度的穩定性。
EMR推出的基於Shuffle的ESS服務,可以最佳化目前Shuffle方案的問題。ESS優勢如下:
使用Push-Style Shuffle代替Pull-Style,減少Mapper的記憶體壓力。
支援IO彙總,Shuffle Read的串連數從M*N降到N,同時更改隨機讀為順序讀。
支援兩副本機制,降低Fetch Fail機率。
支援計算與儲存分離架構,可以部署Shuffle Service至特殊硬體環境中,與計算叢集分離。
解決Spark on Kubernetes時對本地磁碟的依賴。
ESS設計架構圖如下。
使用限制
此文檔僅適用於EMR-3.39.1之前、EMR-4.x系列版本和EMR-5.5.0之前版本。EMR-3.39.1及之後版本,EMR-5.5.0及之後版本,詳情請參見RSS。
建立叢集
以EMR-4.5.0版本為例,您可以通過以下兩種方式建立ESS的叢集:
建立E-MapReduce的Shuffle Service叢集。
建立E-MapReduce的Hadoop叢集。
叢集建立詳情請參見建立叢集。
使用ESS
Spark使用ESS時,需在提交Spark作業時添加以下配置項,配置詳情請參見作業編輯。
Spark相關的參數,請參見Spark Configuration。
參數 | 描述 |
spark.shuffle.manager | 固定值org.apache.spark.shuffle.ess.EssShuffleManager。 |
spark.ess.master.address | 填寫格式<ess-master-ip>:<ess-master-port>。 涉及參數如下:
|
spark.shuffle.service.enabled | 設定為false。 使用EMR的Remote Shuffle Service時需要關閉原有的External Shuffle Service。 |
spark.shuffle.useOldFetchProtocol | 設定為true。 相容舊的Shuffle協議。 |
spark.sql.adaptive.enabled | 設定為false。 EMR的Remote Shuffle Service暫不支援Adaptive Execution。 |
spark.sql.adaptive.skewJoin.enabled |
配置項說明
您可以在ESS服務配置頁面,查看ESS所有的配置項。
參數 | 描述 | 預設值 |
ess.push.data.replicate | 是否開啟兩副本。取值包含:
說明 建議生產環境開啟兩副本。 | true |
ess.worker.flush.queue.capacity | 每個目錄的Flush buffer數量。 說明 為了提升效能,您可以配置多塊磁碟。為了提升整體的讀寫輸送量,建議一塊磁碟不多於2個目錄。 每個目錄的Flush buffer所消耗堆內的記憶體為ess.worker.flush.buffer.size * ess.worker.flush.queue.capacity,即 | 512 |
ess.flush.timeout | Flush到儲存層的逾時時間。 | 240s |
ess.application.timeout | Application心跳逾時時間,逾時會清理Application相關資源。 | 240s |
ess.worker.flush.buffer.size | Flush buffer大小,超過最大值會觸發刷盤。 | 256k |
ess.metrics.system.enable | 是否開啟監控。取值包含:
| false |
ess_worker_offheap_memory | Worker堆外記憶體大小。 | 4g |
ess_worker_memory | Worker堆內記憶體大小。 | 4g |
ess_master_memory | Master堆內記憶體大小。 | 4g |