A。如果使用配置文件方法进行操作,如果我想在已经存在且正在运行的群集中添加新的环境变量,该怎么办?
aws emr create-cluster --configurations file://custom_config.json
在这种情况下,如果要在创建集群之后添加env变量怎么办?
B。使用步骤注入环境变量是否正确,是否可以执行步骤?
确定注入环境变量是一个非常常见的用例,想知道这样做的最佳实践。
谢谢。
答案 0 :(得分:0)
在阅读AWS EMR文档并与人们交谈的基础上,我们想评论一下我们采用的不同方法。
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 ...