如何设置Apache Spark执行器内存

如何增加可用于Apache Spark执行器节点的内存?


我有一个2 GB的文件,适合加载到Apache Spark。我目前在1台机器上运行apache spark,因此驱动程序和执行程序在同一台机器上。本机具有8 GB的内存。


设置要缓存在内存中的文件后,当我尝试计算文件的行数时,出现以下错误:


2014-10-25 22:25:12 WARN  CacheManager:71 - Not enough space to cache partition rdd_1_1 in memory! Free memory is 278099801 bytes.

我看了看文档,这里并设置spark.executor.memory到4g在$SPARK_HOME/conf/spark-defaults.conf


用户界面显示此变量是在Spark环境中设置的。你可以在这里找到截图


但是,当我转到“ 执行器”选项卡时,单个执行器的内存限制仍然设置为265.4 MB。我也仍然遇到相同的错误。


我尝试了这里提到的各种方法,但是仍然出现错误,并且不清楚应该在哪里更改设置。


我正在从spark-shell交互式运行我的代码


守候你守候我
浏览 884回答 3
3回答

慕森王

由于您已经在本地模式下运行Spark,因此设置spark.executor.memory不会产生任何影响。这样做的原因是,在启动spark-shell时,Worker在启动的驱动程序JVM进程中“存在”,并且默认内存为512M。您可以通过将其设置spark.driver.memory为更高的值(例如5g)来增加该值。您可以通过以下任一方法来做到这一点:在属性文件中进行设置(默认为$SPARK_HOME/conf/spark-defaults.conf),spark.driver.memory              5g或在运行时提供配置设置$ ./bin/spark-shell --driver-memory 5g请注意,这无法通过在应用程序中进行设置来实现,因为到那时已经为时已晚,该过程已经以一定数量的内存开始。之所以要使用265.4 MB,是因为Spark 会将spark.storage.memoryFraction * spark.storage.safetyFraction专用于存储内存总量,默认情况下为0.6和0.9。512 MB * 0.6 * 0.9 ~ 265.4 MB因此请注意,并非所有驱动程序内存都可用于RDD存储。但是,当您开始在群集上运行此spark.executor.memory设置时,该设置将在计算专用于Spark的内存缓存的数量时接管。

忽然笑

Grega提交的答案帮助我解决了我的问题。我正在从Docker容器内的python脚本本地运行Spark。最初,在Spark中处理某些数据时,我遇到了Java内存不足错误。但是,我可以通过在脚本中添加以下行来分配更多的内存:conf=SparkConf()conf.set("spark.driver.memory", "4g")&nbsp;这是我用来启动Spark的python脚本的完整示例:import osimport sysimport globspark_home = '<DIRECTORY WHERE SPARK FILES EXIST>/spark-2.0.0-bin-hadoop2.7/'driver_home = '<DIRECTORY WHERE DRIVERS EXIST>'if 'SPARK_HOME' not in os.environ:&nbsp; &nbsp; os.environ['SPARK_HOME'] = spark_home&nbsp;SPARK_HOME = os.environ['SPARK_HOME']sys.path.insert(0,os.path.join(SPARK_HOME,"python"))for lib in glob.glob(os.path.join(SPARK_HOME, "python", "lib", "*.zip")):&nbsp; &nbsp; sys.path.insert(0,lib);from pyspark import SparkContextfrom pyspark import SparkConffrom pyspark.sql import SQLContextconf=SparkConf()conf.set("spark.executor.memory", "4g")conf.set("spark.driver.memory", "4g")conf.set("spark.cores.max", "2")conf.set("spark.driver.extraClassPath",&nbsp; &nbsp; driver_home+'/jdbc/postgresql-9.4-1201-jdbc41.jar:'\&nbsp; &nbsp; +driver_home+'/jdbc/clickhouse-jdbc-0.1.52.jar:'\&nbsp; &nbsp; +driver_home+'/mongo/mongo-spark-connector_2.11-2.2.3.jar:'\&nbsp; &nbsp; +driver_home+'/mongo/mongo-java-driver-3.8.0.jar')&nbsp;sc = SparkContext.getOrCreate(conf)spark = SQLContext(sc)
打开App,查看更多内容
随时随地看视频慕课网APP