【问题标题】:Setting Environment variables in Spark Cluster Mode在 Spark 集群模式下设置环境变量
【发布时间】:2017-11-28 15:00:39
【问题描述】:

我正在浏览这个Apache Spark documentation,它提到:

cluster 模式下在 YARN 上运行 Spark 时,环境变量 需要使用 spark.yarn.appMasterEnv.[EnvironmentVariableName] 您的财产 conf/spark-defaults.conf 文件。

我正在 AWS 数据管道上运行我的 EMR 集群。我想知道我必须在哪里编辑这个 conf 文件。另外,如果我创建自己的自定义 conf 文件,并将其指定为 --configurations 的一部分(在 spark-submit 中),它会解决我的用例吗?

【问题讨论】:

    标签: apache-spark environment-variables hadoop-yarn


    【解决方案1】:

    一种方法如下:(棘手的部分是您可能需要在执行程序和驱动程序参数上设置环境变量)

    spark-submit   \
     --driver-memory 2g \
     --executor-memory 4g \
     --conf spark.executor.instances=4 \
     --conf spark.driver.extraJavaOptions="-DENV_KEY=ENV_VALUE" \
     --conf spark.executor.extraJavaOptions="-DENV_KEY=ENV_VALUE" \
     --master yarn \
     --deploy-mode cluster\
     --class com.industry.class.name \
       assembly-jar.jar
    

    我已经在 EMR 和客户端模式下对其进行了测试,但应该也可以在集群模式下工作。

    【讨论】:

    • 这种情况下应该是JVM属性,不是环境变量?还是我错过了什么?
    • 你是对的。我的回答涵盖了 JVM 属性的情况。在这种情况下,spark.yarn.appMasterEnv.[EnvironmentVariableName]spark.executorEnv.[EnvironmentVariableName] 应该分别用于驱动程序和执行程序。
    【解决方案2】:

    为了将来参考,您可以在创建 EMR 集群时使用文档here 中所述的配置参数直接传递环境变量。

    具体来说,spark-defaults 文件可以通过如下方式传递配置 JSON 进行修改:

    {
        'Classification': 'spark-defaults',
        'Properties': {
            'spark.yarn.appMasterEnv.[EnvironmentVariableName]' = 'some_value',
            'spark.executorEnv.[EnvironmentVariableName]': 'some_other_value'
        }
    },
    

    spark.yarn.appMasterEnv.[EnvironmentVariableName] 将用于使用 YARN (here) 在集群模式下传递变量。和spark.executorEnv.[EnvironmentVariableName] 将变量传递给执行程序进程(here)。

    【讨论】:

      猜你喜欢
      • 2019-05-02
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 2011-10-30
      相关资源
      最近更新 更多