【问题标题】:Set environment variables in AWS EMR during bootstrap在引导期间在 AWS EMR 中设置环境变量
【发布时间】:2017-12-30 06:44:21
【问题描述】:

我在spark-env中添加了如下配置

--configurations '[
     {
       "Classification": "spark-env",
       "Properties": {},
       "Configurations": [
           {
             "Classification": "export",
             "Properties": {
                 "MY_VARIABLE": "MY_VARIABLE"
             }
           }
       ]
     }
     ]'

但如果我只是在 bash 中执行 echo $MY_VARIABLE,我将无法在终端中看到它们。

基本上我想做的事情如下:

  • 安排使用 AWS Lambda 创建 AWS EMR 集群(我将在其中设置所有环境变量,例如 git 凭据)
  • 在机器的引导中,安装一堆东西,包括git
  • git clone 一个存储库(所以我需要使用存储在环境变量中的凭据)
  • 从此存储库执行一些代码

【问题讨论】:

  • 问题不是重复的@tripleee。为了清楚起见,我已经编辑了这个问题。链接的重复问题专门针对 Spark 应用程序的 env 变量,这些变量在 EMR 引导期间不存在。
  • 你可以使用Tags
  • @Vishrant 感谢您的反馈;重新打开。
  • 感谢@tripleee 对此表示赞赏。

标签: bash amazon-emr


【解决方案1】:

将环境变量作为参数传递给引导操作。

【讨论】:

    【解决方案2】:

    使用echo 找不到MY_VARIABLE 的原因是因为MY_VARIABLE 仅适用于spark-env。

    假设您正在使用 pyspark,如果您打开一个 pyspark shell(当您通过 ssh 连接到集群的某个节点时)并尝试输入 os.getenv("MY_VARIABLE"),您将看到分配给该的值变量。

    您的用例的另一种解决方案是:您可以使用一组密钥,而不是使用凭据(这通常不是首选方式),从而允许您使用 SSH(而不是 https)克隆存储库。您可以将这些密钥存储在 aws ssm 中并在 EMR 引导脚本中检索这些密钥。一个例子可能是:

    bootstrap.sh

    export SSM_VALUE=$(aws ssm get-parameter --name $REDSHIFT_DWH_PUBLIC_KEY --with-decryption --query 'Parameter.Value' --output text)
    echo $SSM_VALUE >> $AUTHORIZED_KEYS
    

    就我而言,我需要连接到 Redshift 实例,但这也适用于您的用例。

    阿莱西奥

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 2019-05-02
      • 1970-01-01
      • 2021-01-07
      • 2020-03-28
      • 2016-06-02
      • 2018-11-13
      • 2016-01-26
      • 2021-07-28
      相关资源
      最近更新 更多