当前位置: 首页 > 面试题库 >

如何在YARN Spark作业中设置环境变量?

孟安民
2023-03-14
问题内容

我试图访问Accumulo
1.6
从Apache的星火使用的作业(Java编写的)AccumuloInputFormatnewAPIHadoopRDD。为了做到这一点,我必须AccumuloInputFormat通过调用该setZooKeeperInstance方法来告知在哪里定位ZooKeeper
。此方法采用一个ClientConfiguration对象,该对象指定各种相关属性。

ClientConfiguration通过调用静态loadDefault方法来创建对象。该方法应该在各个位置查找client.conf文件以从中加载其默认值。它应该看的地方之一是$ACCUMULO_CONF_DIR/client.conf

因此,我试图以ACCUMULO_CONF_DIR这样的方式设置环境变量,使其在Spark运行作业时可见(作为参考,我试图在yarn- cluster部署模式下运行)。我尚未找到成功完成此操作的方法。

到目前为止,我已经尝试过:

  • 调用setExecutorEnv("ACCUMULO_CONF_DIR", "/etc/accumulo/conf")SparkConf
  • 出口ACCUMULO_CONF_DIRspark-env.sh
  • 设置spark.executorEnv.ACCUMULO_CONF_DIRspark-defaults.conf

他们都没有工作。在调用之前打印环境时setZooKeeperInstanceACCUMULO_CONF_DIR不会出现。

如果相关,我将使用所有内容的CDH5版本。

这是我要执行的操作的示例(为简洁起见,省略了导入和异常处理):

public class MySparkJob
{
    public static void main(String[] args)
    {
        SparkConf sparkConf = new SparkConf();
        sparkConf.setAppName("MySparkJob");
        sparkConf.setExecutorEnv("ACcUMULO_CONF_DIR", "/etc/accumulo/conf");
        JavaSparkContext sc = new JavaSparkContext(sparkConf);
        Job accumuloJob = Job.getInstance(sc.hadoopConfiguration());
        // Foreach loop to print environment, shows no ACCUMULO_CONF_DIR
        ClientConfiguration accumuloConfiguration = ClientConfiguration.loadDefault();
        AccumuloInputFormat.setZooKeeperInstance(accumuloJob, accumuloConfiguration);
        // Other calls to AccumuloInputFormat static functions to configure it properly.
        JavaPairRDD<Key, Value> accumuloRDD =
            sc.newAPIHadoopRDD(accumuloJob.getConfiguration(),
                               AccumuloInputFormat.class,
                               Key.class,
                               Value.class);
    }
}

问题答案:

因此,我在写问题时(抱歉,寻求声誉的人)找到了答案。问题是CDH5使用Spark
1.0.0,并且我正在通过YARN运行作业。显然,YARN模式不关注执行程序环境,而是使用环境变量SPARK_YARN_USER_ENV来控制其环境。因此,确保SPARK_YARN_USER_ENV包含ACCUMULO_CONF_DIR=/etc/accumulo/conf工作,并使ACCUMULO_CONF_DIR问题在源示例中的指示位置在环境中可见。

独立模式和YARN模式在工作方式上的差异导致SPARK-1680,据报告在Spark
1.1.0中已修复。



 类似资料:
  • 问题内容: 我有一个项目,需要根据用户选择的选择参数设置环境变量。每个项目都有一个主题项目依赖项。我想让用户选择项目,然后从属性文件中加载主题名称。就像是 如果用户从choice参数中选择,我想自动设置为。最好的方法是什么? 每当添加新项目时,我都不想修改Jenkins作业配置。相反,我想将映射保存在文件中,以便可以在版本控制中使用它。 问题答案: 啊哈,我找到了一个简单的解决方案!使用EnvIn

  • 问题内容: 我需要在python脚本中设置一些环境变量,并且我希望从python调用的所有其他脚本(shell脚本)(将是子进程)来查看设置的环境变量。该值为数字。 如果这样做,它会抱怨说1必须是字符串。我也想知道一旦设置它,如何在python(在脚本的后半部分)中读取环境变量。 问题答案: 你可能需要考虑其他方面的代码健壮性; 当你将整数值的变量存储为环境变量时,请尝试 然后为了进行检索,请考虑

  • 问题内容: 如何从内部设置一些环境变量以与类似命令一起使用? 这是我目前所拥有的: 我想在启动脚本中设置环境变量(例如),同时仍然能够仅通过一个命令来启动应用程序。 问题答案: 在脚本命令中设置环境变量: 然后在您的应用中使用。 注意:确保它可以跨平台工作。如果只关心Mac / Linux,则可以忽略它。

  • 问题内容: 我已经开始在Django项目中工作,我想设置一些环境变量,而不必手动设置它们或将bash文件作为源。 我想设置以下变量: 我已经读过这篇文章,但这并不能解决我想要的问题。另外,我尝试在Preferences- > Build,Execution,Deployment- > Console- > Python Console / Django Console中设置环境变量,但是它设置了解

  • 问题内容: 我有一个问题,Jupyter在bashrc文件中看不到env变量,有没有办法在jupyter中加载这些变量或向其中添加自定义变量? 问题答案: 要在jupyter笔记本中设置env变量,只需使用魔术命令或,例如或。(单独使用以打印当前的环境变量。) 请参阅:http : //ipython.readthedocs.io/en/stable/interactive/magics.html

  • 问题内容: 我想在Glassfish 2.1版中部署当前已在Tomcat中部署的应用程序。 在Tomcat server.xml中,我在应用程序使用的server.xml中定义了一个env变量 如何在Glassfish 2.1中设置此变量。我知道版本3中有一个 asenv.conf 文件,但是在2.1中找不到类似的东西。 问题答案: 启动服务器,登录管理控制台,导航到JVM选项,并添加-D参数,然