【问题标题】:How to change Spark setting to allow spark.dynamicAllocation.enabled?如何更改 Spark 设置以允许 spark.dynamicAllocation.enabled?
【发布时间】:2017-03-06 21:46:05
【问题描述】:

我在 pyspark 中运行 python 脚本并收到以下错误: NameError: name 'spark' 未定义

我查了一下,发现原因是spark.dynamicAllocation.enabled还不允许。

根据 Spark 的文档 (https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-dynamic-allocation.html#spark_dynamicAllocation_enabled):spark.dynamicAllocation.enabled(默认:false)控制是否启用动态分配。假设spark.executor.instances未设置或为0(这是默认值)。

由于默认设置为false,我需要更改Spark 设置以启用spark.dynamicAllocation.enabled

我使用 brew 安装了 Spark,但没有更改其配置/设置。

如何更改设置并启用spark.dynamicAllocation.enabled

非常感谢。

【问题讨论】:

  • 以上链接不是 spark 官方文档。它的 Mastering Apache Spark Book by Jack 也是 SO 的用户。请适当地改变它:)

标签: python apache-spark configuration pyspark dynamic-allocation


【解决方案1】:

除了以前的答案之外,由于解释器设置(如果您使用 Zeppelin),提到的所有配置都可能无法正常工作。我使用 Livy,它的默认设置会覆盖 dynamicAllocation 参数。

【讨论】:

  • 这可以是评论而不是答案。
【解决方案2】:

问题:如何更改设置并启用 spark.dynamicAllocation.enabled?

您可以通过 3 个选项来实现这一目标。
1)修改spark-defaults.conf中下面提到的参数
2) 从您的spark-submit
从 --conf 发送以下参数 3) 以编程方式指定动态分配的配置,如下所示。

您可以通过编程方式做到这一点 您可以像这样以编程方式完成。

val conf = new SparkConf()
      .setMaster("ClusterManager")
      .setAppName("test-executor-allocation-manager")
      .set("spark.dynamicAllocation.enabled", "true")
      .set("spark.dynamicAllocation.minExecutors", 1)
      .set("spark.dynamicAllocation.maxExecutors", 2)
      .set("spark.shuffle.service.enabled", "true") // for stand alone

【讨论】:

  • 非常感谢!我应该将您在此处提供的脚本包含在我编写的 pyspark 中吗?或者这是我应该修改的配置 .sh 文件的一部分?
  • 你必须在你的python程序文件中包含这个,而且上面是scala语法
  • 非常感谢。我正在编写 Python 脚本以发送到 pyspark。让我尝试修改你在这里的建议,看看它是否有效。
【解决方案3】:

配置参数可以通过 notebook 使用以下类似命令在 pyspark 中设置:

spark.conf.set("spark.sql.crossJoin.enabled", "true")

【讨论】:

    【解决方案4】:

    这个问题也会影响使用其他资源进行的 Spark 安装,例如用于在 Amazon Web Services 上安装的 spark-ec2 脚本。从 Spark 文档中,需要设置 SPARK_HOME/conf/spark-defaults.conf 中的两个值:

    spark.shuffle.service.enabled   true
    spark.dynamicAllocation.enabled true
    

    看到这个:https://spark.apache.org/docs/latest/configuration.html#dynamic-allocation

    如果您的安装在 SPARK_HOME/conf 中有 spark-env.sh 脚本,请确保它没有如下行,或者它们被注释掉:

    export SPARK_WORKER_INSTANCES=1 #or some other integer, or
    export SPARK_EXECUTOR_INSTANCES=1 #or some me other integer
    

    【讨论】:

      【解决方案5】:

      有几个地方可以设置它。如果您想在每个作业的基础上启用它,请在每个应用程序中设置以下内容:

      conf.set("spark.dynamicAllocation.enabled","true")
      

      如果要为所有作业设置 if,请导航到 spark.conf 文件。在 Hortonworks 发行版中应该是

      /usr/hdp/current/spark-client/conf/
      

      将设置添加到您的 spark-defaults.conf 中,应该很好。

      【讨论】:

      • 非常感谢!我想在每个工作的基础上启用它。 conf.set("spark.dynamicAllocation.enabled","true") 这是我要在终端中输入的命令行吗?在键入此命令行之前,我应该更改到哪个目录?非常感谢!
      • 如果您使用 spark-shell 从命令行运行,请使用以下命令启动 shell: spark-shell --conf spark.dynamicAllocation.enabled=true 无论您使用哪个目录在,当您在 com 中启动 shell 时,如果您正在编写应用程序,请在使用 conf.set() 创建 spark 配置后在应用程序中设置它。
      • 非常感谢。我知道了。如果我正在编写 Python 脚本并尝试在命令行中使用 spark-submit 运行它(而不是在 pyspark shell 中),我应该在我的 Python 脚本中包含这行代码,对吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 2019-10-25
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 2023-03-19
      • 2015-12-30
      相关资源
      最近更新 更多