gpt4 book ai didi

apache-spark - 将环境变量传递给 YARN 容器

转载 作者:可可西里 更新时间:2023-11-01 16:36:20 24 4
gpt4 key购买 nike

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

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

有一个库可以读取环境变量并对其进行处理(无关紧要)。因此,每个任务在其执行器/映射器/缩减器环境中都需要这个环境变量。

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

总结一下,我想传递 YARN 环境变量,它将在所有容器(ApplicationMaster 和执行器/映射器/缩减器)上公开。

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

SPARK - 我玩过:

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

这实际上将 env 变量暴露给应用程序主控而不是执行器,因此如果 UDF 函数试图找到它,它将失败。

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

spark.executorEnv.[EnvironmentVariableName]

在 MapReduce 中,我有点迷路了,我没有找到一种方法来传递环境变量

hadoop jar

我能做的最好的事情是在 conf 文件上传递变量,而不是使用 java 代码公开它。将它暴露给我使用的映射器/缩减器:

mapreduce.map/reducer.env

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

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

例如

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

我也很乐意接受答案,如果它只解决 MapReduce 的方式让我在不改变 MapReduce 代码的情况下公开 env 变量。

最佳答案

我想你正在寻找这些

  • 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',那么它会将 A 环境变量设置为“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 环境特定的东西,例如

关于apache-spark - 将环境变量传递给 YARN 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51968796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com