我试图增加Spark中执行程序和驱动程序的内存分配,但是我感到奇怪的是Spark忽略了我的配置。
我正在使用以下命令:
火花提交spark_consumer.py --driver-memory = 10G --executor-memory = 5G --conf spark.executor.extraJavaOptions ='-XX:+ UseParallelGC -XX:+ PrintGCDetails -XX:+ PrintGCTimeStamps'
我的初始化代码是
class SparkRawConsumer:
def __init__(self, filename):
self.sparkContext = SparkContext.getOrCreate()
self.sparkContext.setLogLevel("ERROR")
self.sqlContext = SQLContext(self.sparkContext)
从理论上讲,我应该看到我的驱动程序总共有10GB的可用内存。但是,我在Spark UI中看到了这一点(我的可用内存少于400MB):
为什么Spark会忽略我要传递的配置?
答案 0 :(得分:0)
定义火花配置的三种方法
1)spark-env.sh
2)spark-submit参数
3)硬编码sparkConf,例如:sparkConf.set("spark.driver.memory","10G");
优先级是:硬编码> spark-submit> spark.env;
如果您认为自己的参数被其他内容覆盖,则可以使用以下命令进行检查:sparkConf.getOption("spark.driver.memory");
如果要确保您的选项不会覆盖硬代码,则
您可以在此处查看所有选项:https://spark.apache.org/docs/latest/configuration.html
答案 1 :(得分:0)
这里的问题是我没有正确指定参数的顺序。键入spark-submit --help
可以清楚地指定输入参数到spark-submit
的顺序:
Usage: spark-submit [options] <app jar | python file | R file> [app arguments]
一旦更改了参数的顺序,便可以增加PySpark应用程序的内存:
spark-submit --driver-memory 8G --executor-memory 8G spark_consumer.py