将环境变量传递给 YARN 容器



我们有一个复杂的环境,它使用多种技术计算日常任务:SPARK PY-SPARK Java MapReduce和HIVE。

最近,我们集成了一个新系统,该系统可以在运行时对服务进行动态解析。此系统在初始化任务之前(动态(更新环境变量。

有一个库读取环境变量并用它做一些事情(不相关(。因此,每个任务都需要在其执行器/映射器/化简器环境中使用此 env 变量。

我们的任务由 YARN 资源管理器管理。

总而言之,我想传递 YARN env 变量,它将在其所有容器(ApplicationMaster 和执行器/映射器/化简器(上公开这些变量。

到目前为止我尝试过的事情:

火花 - 我玩过:

spark-submit --conf spark.yarn.appMasterEnv.KEY=Value

这实际上将 env 变量公开给应用程序主节点,但不在执行器上公开,因此如果 UDF 函数尝试找到它,它将失败。

一个可能的解决方案是使用:

spark.executorEnv.[EnvironmentVariableName]

在MapReduce中我有点迷茫,我没有找到传递环境变量的方法

hadoop jar

我能做的最好的事情就是在 conf 文件上传递变量,然后使用 java 代码公开它。 要将其公开给我使用的映射器/化简器:

mapreduce.map/reducer.env

这种方法不好,因为它让我修改了所有的MapReduce作业

。所以我决定通过纱线容器来接近它。然而,经过几天的实验,我得到的结果为零。 所以我的问题。 有没有办法通过 spark-submit 和 hadoop jar 操纵纱线用我的额外环境变量初始化它的容器

例如

hadoop jar -Dyarn.expose.this.variable=value

我也很乐意接受答案,如果它只解决MapReduce,让我在不改变MapReduce代码的情况下暴露环境变量。

我想你正在寻找这些

  • yarn.app.mapreduce.am.env
  • mapreduce.map.env
  • mapreduce.reduce.env

在 https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml 上搜索说明

具体来说,它说如果你设置-Dmapreduce.map.env='A=foo', then it will set A environment variable to "foo"

这些将被传递给 YARN 容器。

这种方法不好,因为它让我修改了所有的MapReduce作业

我确定我理解您如何避免否则更改代码。需要修改某些库才能读取环境或其他定义的属性

最近,我们集成了一个新系统,该系统可以在运行时为服务进行动态解析

我想我已经看到了使用 Zookeeper/Consul/Etcd 设置的动态配置;但我还没有看到 Docker 容器标签之外的 YARN 环境特定的东西,例如

相关内容

  • 没有找到相关文章

最新更新