簡體   English   中英

Spark驅動程序內存和執行程序內存

[英]Spark Driver Memory and Executor Memory

我是Spark的初學者,我正在運行我的應用程序從文本字段中讀取14KB數據,執行一些轉換和操作(收集,收集地圖)並將數據保存到數據庫

我在我的macbook中本地運行它有16G內存,有8個邏輯內核。

Java Max堆設置為12G。

這是我用來運行應用程序的命令。

bin / spark-submit --class com.myapp.application --master local [*] - executor-memory 2G --driver-memory 4G /jars/application.jar

我收到以下警告

2017-01-13 16:57:31.579 [Executor task launch worker -8hread] WARN org.apache.spark.storage.MemoryStore - 沒有足夠的空間來緩存內存中的rdd_57_0! (到目前為止計算的26.4 MB)

任何人都可以指導我這里出了什么問題,我怎樣才能提高性能? 還有如何優化漏斗? 這是我本地系統中發生的泄漏的視圖

在此輸入圖像描述

運行具有太多內存的執行程序通常會導致過多的垃圾收集延遲。 因此分配更多內存並不是一個好主意。 由於你只有14KB數據2GB執行器內存和4GB驅動程序內存綽綽有余。 分配這么多內存是沒有用的。 您可以使用100MB內存運行此作業,性能將優於2GB。

運行應用程序時,驅動程序內存更有用,在紗線群集模式下,因為應用程序主機運行驅動程序。 在這里,您在本地模式下運行應用程序driver-memory不是必需的。 您可以從作業中刪除此配置。

在您的應用程序中,您已分配

Java Max heap is set at: 12G.
executor-memory: 2G 
driver-memory: 4G

總內存分配= 16GB,你的macbook只有16GB內存。 在這里,您已將總RAM內存分配給spark應用程序。

這個不好。 操作系統本身消耗大約1GB內存,您可能運行其他也消耗RAM內存的應用程序。 所以在這里你實際上分配了更多的內存。 這是您的應用程序拋出錯誤的根本原因Not enough space to cache the RDD

  1. 沒有使用將Java堆分配到12 GB。 您需要將其減少到4GB或更少。
  2. 將執行程序內存減少到executor-memory 1G或更少
  3. 由於您在本地運行,請從配置中刪除driver-memory

提交你的工作。 它會順利運行。

如果您非常希望了解火花記憶管理技術,請參閱這篇有用的文章。

Spark on yarn executor資源分配

在本地模式下,您不需要指定master,使用默認參數就可以了。 官方網站稱,“Spark的bin目錄中的spark-submit腳本用於在集群上啟動應用程序。它可以通過統一的界面使用Spark支持的所有集群管理器,因此您不必為每個集成管理器專門配置應用程序。一個。“。所以你最好在群集中使用spark-submit,在本地你可以使用spark-shell。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM