在Spark Cluster Mode中设置环境变量

时间:2017-11-28 15:00:39

标签: apache-spark environment-variables yarn

我正在经历这个Apache Spark documentation,它提到:

  

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

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

2 个答案:

答案 0 :(得分:0)

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

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和客户端模式下测试了它,但也应该在集群模式下工作。

答案 1 :(得分:0)

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

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

{
    '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)。