首页 > 解决方案 > EMR 集群引导 + 集群设置环境变量

问题描述

我正在尝试创建一个 EMR 集群(通过命令行)并为其提供一些引导操作和配置文件。

目的是设置一些SPARK/ Yarnvars 和一些其他应该在集群中使用的环境变量(因此这些环境变量应该在主服务器和从服务器上可用)。

我给它一个如下所示的配置文件:

[
 {
    "Classification": "yarn-env",
    "Properties": {},
    "Configurations": [
      {
        "Classification": "export",
        "Properties": {
          "appMasterEnv.SOME_VAR": "123",
          "nodemanager.vmem-check-enabled": "false",
          "executor.memoryOverhead": "5g"
        },
        "Configurations": [
        ]
      }
    ]
  },
  {
    "Classification": "spark-env",
    "Properties": {},
    "Configurations": [
      {
        "Classification": "export",
        "Properties": {
          "appMasterEnv.SOME_VAR": "123",
          "PYSPARK_DRIVER_PYTHON": "python36",
          "PYSPARK_PYTHON": "python36",
          "driver.memoryOverhead": "14g",
          "driver.memory": "14g",
          "executor.memory": "14g"
        },
        "Configurations": [
        ]
      }
    ]
  }
]

但是,当我尝试向集群添加一些步骤时,该步骤失败,声称它不知道环境变量SOME_VAR

Traceback (most recent call last):
  File "..", line 9, in <module>.
  ..
    raise EnvironmentError
OSError

(行号是我尝试使用环境 var 的地方SOME_VAR

我是否以正确的方式为SOME_VAR和其他Spark/ Yarnvars 做这件事?

谢谢

标签: pysparkhadoop-yarnamazon-emr

解决方案


按照用户 lenin 的建议,删除 appMasterEnv.SOME_VAR 前面的 appMasterEnv。

使用分类 yarn-env 将环境变量传递给工作节点。

使用分类 spark-env 将环境变量传递给驱动程序,使用部署模式客户端。使用部署模式集群时,使用 yarn-env。


推荐阅读