全部產品
Search
文件中心

E-MapReduce:ESS(僅對存量使用者開放)

更新時間:Jul 01, 2024

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設計架構圖如下。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叢集。SHUFFLE

  • 建立E-MapReduce的Hadoop叢集。ESS

叢集建立詳情請參見建立叢集

使用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>

涉及參數如下:

  • <ess-master-ip>:Master節點的公網IP地址。

  • <ess-master-port>:固定值9097。

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:開啟兩副本。

  • false:不開啟兩副本。

說明

建議生產環境開啟兩副本。

true

ess.worker.flush.queue.capacity

每個目錄的Flush buffer數量。

說明

為了提升效能,您可以配置多塊磁碟。為了提升整體的讀寫輸送量,建議一塊磁碟不多於2個目錄。

每個目錄的Flush buffer所消耗堆內的記憶體為ess.worker.flush.buffer.size * ess.worker.flush.queue.capacity,即256 KB * 512 = 128 MB。每個目錄提供的槽位(slots)數量是該參數的一半。例如,總共28個目錄,則整體記憶體消耗是128 MB * 28 = 3.5 GB,整體的slots數量是512 * 28 / 2 = 7168

512

ess.flush.timeout

Flush到儲存層的逾時時間。

240s

ess.application.timeout

Application心跳逾時時間,逾時會清理Application相關資源。

240s

ess.worker.flush.buffer.size

Flush buffer大小,超過最大值會觸發刷盤。

256k

ess.metrics.system.enable

是否開啟監控。取值包含:

  • true:開啟監控。

  • false:不開啟監控。

false

ess_worker_offheap_memory

Worker堆外記憶體大小。

4g

ess_worker_memory

Worker堆內記憶體大小。

4g

ess_master_memory

Master堆內記憶體大小。

4g