为了账号安全,请及时绑定邮箱和手机立即绑定

如何设置Apache Spark执行器内存

如何设置Apache Spark执行器内存

守候你守候我 2020-02-04 16:10:45
如何增加可用于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交互式运行我的代码
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超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的内存缓存的数量时接管。


查看完整回答
反对 回复 2020-02-04
?
忽然笑

TA贡献1806条经验 获得超5个赞

Grega提交的答案帮助我解决了我的问题。我正在从Docker容器内的python脚本本地运行Spark。最初,在Spark中处理某些数据时,我遇到了Java内存不足错误。但是,我可以通过在脚本中添加以下行来分配更多的内存:


conf=SparkConf()

conf.set("spark.driver.memory", "4g") 

这是我用来启动Spark的python脚本的完整示例:


import os

import sys

import glob


spark_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:

    os.environ['SPARK_HOME'] = spark_home 


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")):

    sys.path.insert(0,lib);


from pyspark import SparkContext

from pyspark import SparkConf

from pyspark.sql import SQLContext


conf=SparkConf()

conf.set("spark.executor.memory", "4g")

conf.set("spark.driver.memory", "4g")

conf.set("spark.cores.max", "2")

conf.set("spark.driver.extraClassPath",

    driver_home+'/jdbc/postgresql-9.4-1201-jdbc41.jar:'\

    +driver_home+'/jdbc/clickhouse-jdbc-0.1.52.jar:'\

    +driver_home+'/mongo/mongo-spark-connector_2.11-2.2.3.jar:'\

    +driver_home+'/mongo/mongo-java-driver-3.8.0.jar') 


sc = SparkContext.getOrCreate(conf)


spark = SQLContext(sc)


查看完整回答
反对 回复 2020-02-04
  • 3 回答
  • 0 关注
  • 806 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信