将自定义环境变量添加到AWS EMR的标准做法是什么?

时间:2019-06-08 15:34:31

标签: amazon-web-services amazon-s3 amazon-ec2 amazon-emr

  • 与Elastic Beanstalk不同,AWS EMR没有添加/删除自定义环境变量的任何功能。

A。如果使用配置文件方法进行操作,如果我想在已经存在且正在运行的群集中添加新的环境变量,该怎么办?

aws emr create-cluster --configurations file://custom_config.json

在这种情况下,如果要在创建集群之后添加env变量怎么办?

B。使用步骤注入环境变量是否正确,是否可以执行步骤?

确定注入环境变量是一个非常常见的用例,想知道这样做的最佳实践。

谢谢。

2 个答案:

答案 0 :(得分:0)

在阅读AWS EMR文档并与人们交谈的基础上,我们想评论一下我们采用的不同方法。

  1. 截止到日期(-2019年6月),AWS EMR还无法添加可以像在弹性beantalk中的配置一样添加的环境变量。
  2. 我们可以看看两种方法-

a。在集群创建期间通过 config ::

添加
  

aws emr create-cluster-配置文件://custom_config.json

[参考:: How to set a custom environment variable in EMR to be available for a spark Application]

使用这种方法的回退是,一旦创建集群,我们将无法通过修改集群来做到这一点。

b。使用AWS EMR的列表群集视图中的引导操作选项。

 --bootstrap-actions Path=s3://mybucket/filename",Args=[arg1,arg2]

尽管在集群创建过程中也需要指定此文件,但是我们可以随时更改此文件。  为了使更改得到体现- 我们需要在主节点中维护一个cronjob才能在所有节点中定期运行此脚本。 产生新节点以自动放大时,修改后的值将自动推送到这些新创建的实例。

是的,这是一种变通方法,但是,除了登录到每个实例和手动设置环境变量之外,这些似乎是当前可用的方法。

请随时评论任何建议。

答案 1 :(得分:0)

使环境变量成为udf的一部分。

驱动程序的示例代码,例如在循环中:

envvar_foo_value = ... # read from S3, database, whatever

@series_udf(return_type=LAST_INTERACTOR_SPARK_RETURN_TYPE)
def env_var_aware_udf(arg1, arg2):
    os.environ["FOO"] = envvar_foo_value
    return actual_udf(arg1, arg2)

.. do something with env_var_aware_udf ...