将环境变量传递给 YARN 容器
Passing environment variables to YARN containers
我们有一个复杂的环境,它使用多种技术计算日常任务:SPARK PY-SPARK Java MapReduce 和 HIVE。
最近我们集成了一个新系统,可以在运行时对服务进行动态解析。此系统在任务初始化之前(动态地)更新环境变量。
有一个库可以读取环境变量并用它做一些事情(不相关)。因此,每个任务在其 executor/mapper/reducer 环境中都需要这个环境变量。
我们的任务由 YARN 资源管理器管理。
总结一下,我想传递 YARN 环境变量,它将在所有容器(ApplicationMaster 和 executors/mappers/reducers)上公开。
到目前为止我尝试过的事情:
SPARK - 我玩过:
spark-submit --conf spark.yarn.appMasterEnv.KEY=Value
这实际上将 env 变量暴露给应用程序主机而不是执行器,因此如果 UDF 函数试图找到它,它将失败。
一个可能的解决方案是使用:
spark.executorEnv.[EnvironmentVariableName]
在 MapReduce 中我有点迷路我没有找到一种方法来传递环境变量
hadoop jar
我能做的最好的事情是在 conf 文件上传递变量,而不是使用 java 代码公开它。
将其暴露给 mappers/reducers 我使用了:
mapreduce.map/reducer.env
这种方法不好,因为它让我修改我所有的 MapReduce 作业
所以我决定通过纱线容器来接近它。然而,经过几天的实验,我得到了零结果。
所以我的问题。
有没有一种方法可以通过 spark-submit 和 hadoop jar
来操纵 yarn 使用我的额外环境变量来初始化它的容器
例如
hadoop jar -Dyarn.expose.this.variable=value
我也很乐意接受答案,如果它仅以让我在不更改 MapReduce 代码的情况下公开环境变量的方式解决 MapReduce。
我想你正在寻找这些
yarn.app.mapreduce.am.env
mapreduce.map.env
mapreduce.reduce.env
上搜索描述
具体来说,如果你设置-Dmapreduce.map.env='A=foo', then it will set A environment variable to "foo"
那些将被传递到 YARN 容器。
This approach is not good for because it makes me modify all my MapReduce Jobs
我确定我了解您如何避免以其他方式更改代码。需要修改一些库以读取环境或以其他方式定义的属性
Recently we integrated a new system which make dynamic resolution for services in runtime
我想我已经看到 Zookeeper/Consul/Etcd 的动态配置设置;但是我没有看到 Docker 容器标签之外的 YARN 环境特定的东西,例如
我们有一个复杂的环境,它使用多种技术计算日常任务:SPARK PY-SPARK Java MapReduce 和 HIVE。
最近我们集成了一个新系统,可以在运行时对服务进行动态解析。此系统在任务初始化之前(动态地)更新环境变量。
有一个库可以读取环境变量并用它做一些事情(不相关)。因此,每个任务在其 executor/mapper/reducer 环境中都需要这个环境变量。
我们的任务由 YARN 资源管理器管理。
总结一下,我想传递 YARN 环境变量,它将在所有容器(ApplicationMaster 和 executors/mappers/reducers)上公开。
到目前为止我尝试过的事情:
SPARK - 我玩过:
spark-submit --conf spark.yarn.appMasterEnv.KEY=Value
这实际上将 env 变量暴露给应用程序主机而不是执行器,因此如果 UDF 函数试图找到它,它将失败。
一个可能的解决方案是使用:
spark.executorEnv.[EnvironmentVariableName]
在 MapReduce 中我有点迷路我没有找到一种方法来传递环境变量
hadoop jar
我能做的最好的事情是在 conf 文件上传递变量,而不是使用 java 代码公开它。 将其暴露给 mappers/reducers 我使用了:
mapreduce.map/reducer.env
这种方法不好,因为它让我修改我所有的 MapReduce 作业
所以我决定通过纱线容器来接近它。然而,经过几天的实验,我得到了零结果。 所以我的问题。 有没有一种方法可以通过 spark-submit 和 hadoop jar
来操纵 yarn 使用我的额外环境变量来初始化它的容器例如
hadoop jar -Dyarn.expose.this.variable=value
我也很乐意接受答案,如果它仅以让我在不更改 MapReduce 代码的情况下公开环境变量的方式解决 MapReduce。
我想你正在寻找这些
yarn.app.mapreduce.am.env
mapreduce.map.env
mapreduce.reduce.env
具体来说,如果你设置-Dmapreduce.map.env='A=foo', then it will set A environment variable to "foo"
那些将被传递到 YARN 容器。
This approach is not good for because it makes me modify all my MapReduce Jobs
我确定我了解您如何避免以其他方式更改代码。需要修改一些库以读取环境或以其他方式定义的属性
Recently we integrated a new system which make dynamic resolution for services in runtime
我想我已经看到 Zookeeper/Consul/Etcd 的动态配置设置;但是我没有看到 Docker 容器标签之外的 YARN 环境特定的东西,例如