Spark中executor memory引數詳解

2021-10-07 15:17:10 字數 1347 閱讀 4912

我們知道,spark執行的時候,可以通過 --executor-memory 來設定executor執行時所需的memory。但如果設定的過大,程式是會報錯的,如下

555.png

那麼這個值最大能設定多少呢?本文來分析一下。 文中安裝的是spark1.6.1,安裝在hadoop2.7上。

1、相關的2個引數

1.1 yarn.scheduler.maximum-allocation-mb

這個引數表示每個container能夠申請到的最大記憶體,一般是集群統一配置。spark中的executor程序是跑在container中,所以container的最大記憶體會直接影響到executor的最大可用記憶體。當你設定乙個比較大的記憶體時,日誌中會報錯,同時會列印這個引數的值。如下圖 ,6144mb,即6g。

666.png

1.2 spark.yarn.executor.memoryoverhead

executor執行的時候,用的記憶體可能會超過executor-memoy,所以會為executor額外預留一部分記憶體。spark.yarn.executor.memoryoverhead代表了這部分記憶體。這個引數如果沒有設定,會有乙個自動計算公式(位於clientarguments.scala中),**如下:

777.png

其中,memory_overhead_factor預設為0.1,executormemory為設定的executor-memory, memory_overhead_min預設為384m。引數memory_overhead_factor和memory_overhead_min一般不能直接修改,是spark**中直接寫死的。

2、executor-memory計算

計算公式:

val executormem = args.executormemory + executormemoryoverhead

假設executor-為x(整數,單位為m),即

1) 如果沒有設定spark.yarn.executor.memoryoverhead,

executormem= x+max(x*0.1,384)

2)如果設定了spark.yarn.executor.memoryoverhead(整數,單位是m)

executormem=x +spark.yarn.executor.memoryoverhead

需要滿足的條件:

executormem< yarn.scheduler.maximum-allocation-mb

注意:以上**位於client.scala中。

本例中 :

6144=x+max(x*0.1,384)

x=5585.45

向上取整為5586m,即最大能設定5586m記憶體。

Spark基礎(三)Spark中的任務執行

容錯機制 spark的架構特點 根據客戶端提交的jar包劃分出來乙個個的rdd,根據rdd之間的lineage關係劃分dag。劃分dag的目的是為了劃分stage。2 dag通過dagscheller劃分為stage 再劃分為taskset 根據劃分出來的dag,將dag送個dagscheduler...

spark更改分割槽 Spark中的分割槽方法詳解

一 spark資料分割槽方式簡要 在spark中,rdd resilient distributed dataset 是其最基本的抽象資料集,其中每個rdd是由若干個partition組成。在job執行期間,參與運算的partition資料分布在多台機器的記憶體當中。這裡可將rdd看成乙個非常大的陣...

spark中的容錯

一般來說,分布式資料集的容錯性有兩種方式 資料檢查點和記錄資料的更新。面向大規模資料分析,資料檢查點操作成本很高,需要通過資料中心的網路連線在機器之間複製龐大的資料集,而網路頻寬往往比記憶體頻寬低得多,同時還需要消耗更多的儲存資源。因此,spark選擇記錄更新的方式。但是,如果更新粒度太 細太多,那...