如何在客户端模式下设置 `spark.driver.memory` - pyspark(版本 2.3.1)

Cat*_*lts 5 python config pyspark

我是 PySpark 的新手,我正在尝试在我的本地计算机上使用pySpark(版本 2.3.1)和Jupyter-Notebook

我想设置spark.driver.memory通过这样做是为了9GB:

spark = SparkSession.builder \
       .master("local[2]") \
       .appName("test") \
       .config("spark.driver.memory", "9g")\
       .getOrCreate()
sc = spark.sparkContext
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

spark.sparkContext._conf.getAll()  # check the config
Run Code Online (Sandbox Code Playgroud)

它返回

[('spark.driver.memory', '9g'),
('spark.driver.cores', '4'),
('spark.rdd.compress', 'True'),
('spark.driver.port', '15611'),
('spark.serializer.objectStreamReset', '100'),
('spark.app.name', 'test'),
('spark.executor.id', 'driver'),
('spark.submit.deployMode', 'client'),
('spark.ui.showConsoleProgress', 'true'),
('spark.master', 'local[2]'),
('spark.app.id', 'local-xyz'),
('spark.driver.host', '0.0.0.0')]
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为当我查看文档时,它表明

注意:在客户端模式下,此配置不能直接在您的应用程序中通过 SparkConf设置,因为驱动程序 JVM 已经在此时启动。相反,请通过 --driver-memory 命令行选项或在您的默认属性文件中进行设置。文档在这里

但是,正如您在上面的结果中看到的,它返回

[('spark.driver.memory', '9g')

即使我访问spark web UI(在端口4040环境选项卡上),它仍然显示 在此处输入图片说明

我又试了一次,用'spark.driver.memory', '10g'. 该网页UIspark.sparkContext._conf.getAll()返回的10G“ 。我对此很困惑。我的问题是:

  1. 关于spark.driver.memory配置的文件是否正确

  2. 如果文档是正确的,是否有正确的方法可以spark.driver.memory在配置后检查。我试着spark.sparkContext._conf.getAll()以及星火网络用户界面,但它似乎导致了一个错误的答案。

kar*_*917 6

您提供了以下代码。

spark = SparkSession.builder \
       .master("local[2]") \
       .appName("test") \
       .config("spark.driver.memory", "9g")\ # This will work (Not recommended)
       .getOrCreate()
sc = spark.sparkContext
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
Run Code Online (Sandbox Code Playgroud)

这个配置一定不能SparkConf直接通过

意味着您可以设置驱动程序内存,但不建议在RUN TIME 设置。因此,如果您使用 设置它spark.driver.memory,它将接受更改并覆盖它。但是,不建议这样做。因此,该特定注释 ** 不得直接通过 SparkConf 设置此配置** 在文档中不适用。您可以告诉 JVM9g使用SparkConf.

现在,如果你按照这条线走(Spark 对此很好

相反,请通过 --driver-memory 设置它,这意味着

当您尝试针对 提交Spark作业时client,您可以使用--driver-memory标志设置驱动程序内存,例如

spark-submit --deploy-mode client --driver-memory 12G
Run Code Online (Sandbox Code Playgroud)

现在该行以以下短语结尾

或在您的默认属性文件中。

您可以SPARK在您的环境中告诉从哪里读取默认设置SPARK_CONF_DIR$SPARK_HOME/conf在哪里driver-memory可以配置。Spark对此也很好。

回答你的第二部分

如果文档是正确的,是否有正确的方法可以在配置后检查 spark.driver.memory。我尝试了 spark.sparkContext._conf.getAll() 以及 Spark web UI,但它似乎导致了错误的答案。”

我想说文档是正确的。您也可以通过使用或最终检查您指定的工作内容来检查驱动程序内存spark.sparkContext._conf.getAll()

>>> sc._conf.get('spark.driver.memory')
u'12g' # which is 12G for the driver I have used
Run Code Online (Sandbox Code Playgroud)

总结一下文档。您可以在

  • spark-shellJupyter Notebook或您已经初始化的任何其他环境Spark不推荐)。
  • spark-submit 命令(推荐)
  • SPARK_CONF_DIRSPARK_HOME/conf(推荐)
  • 您可以从spark-shell指定开始

    spark-shell --driver-memory 9G

有关更多信息,请参阅

默认 Spark 属性文件

  • 说“此配置不能直接通过 SparkConf 设置”是因为这样做不起作用。说“在运行时不建议这样做”意味着您仍然可以这样做并且它会起作用,但事实并非如此。 (2认同)