如何使用 SSM 在 AWS EMR 中设置环境变量以供 pyspark 脚本使用

问题描述 投票:0回答:1

我正在使用 emr-6.12.0 并尝试设置存储在 bootstrap.sh 文件中的秘密管理器中的环境变量。

SECRET_NAME="/myapp/dev/secrets"
SECRETS_JSON=$(aws secretsmanager get-secret-value --secret-id $SECRET_NAME --query SecretString --output text)

# Parse the secrets and set them as environment variables
for key in $(echo "$SECRETS_JSON" | jq -r "keys[]"); do
  value=$(echo "$SECRETS_JSON" | jq -r ".$key // empty" | sed 's/"/\\"/g')
  echo "$value"
  if [ ! -z "$value" ]; then
    export "$key"="$value"
  fi
done

我可以在日志中看到这些值。

但是当我尝试从 pyspark 脚本访问这些变量时,我无法获取这些环境变量。

os.environ.get("POSTGRES_URL") // Returns None

for key, value in os.environ.items():
    self.logger.info(f"{key}: {value}") // not able to see my env variables

由于我是 EMR 和 Spark 的新手,请帮助我了解如何将环境变量从 SSM 设置为 EMR。

apache-spark pyspark amazon-emr
1个回答
0
投票

在脚本中设置环境变量时,它们仅影响该脚本及其子进程的环境。在这种情况下,Spark 脚本可能在与

bootstrap.sh
脚本不同的进程中运行。

为了确保 Spark 脚本可以使用环境变量,您应该考虑在运行 Spark 作业之前获取

bootstrap.sh
脚本。这样,环境变量将在执行 Spark 脚本的同一 shell 会话中设置。

您可以将 Spark 脚本执行命令修改为如下所示:

source bootstrap.sh && spark-submit --master <spark_master> <spark_script.py>

这将确保

bootstrap.sh
中设置的环境变量可用于 Spark 脚本。

© www.soinside.com 2019 - 2024. All rights reserved.