从Yaml文件加载Java Spark配置

tamjd1

我有一个Java SparkConfSpark应用程序,在其中实例化具有Spark所需配置对象。当前,它看起来像这样:

SparkConf conf = new SparkConf()
    .setAppName(appName)
    .setMaster(master)
    .set("spark.executor.memory", "8g")
    .set....

主名称和应用程序名称来自yaml包含应用程序配置文件,其余的火花配置都经过硬编码并一次设置一个。

我的yaml文件还包含这些Spark配置的键/值对。我的其他(python)应用程序直接从此处使用spark配置。看起来像这样:

spark:
    master: ...
    appname: ... 
    conf:
        spark.mesos.executor.home: '/data/spark'
        spark.executor.memory: '8g'
        spark.network.timeout: '420'
        ... other spark configs

我想知道是否可以使用yaml文件中的这些配置,使用所setAll()提供的方法自动在代码中设置spark配置SparkConf,而不是一次设置一个。

这是我yaml目前文件中读取配置的方式,但是它不起作用:

LinkedHashMap<String, String> sparkConf = new LinkedHashMap<>((Map<String, String>) ((Map) yaml.get("spark")).get("conf"));

如何spark: confyaml文件中加载文件,以便该setAll()方法可以使用它显然,该方法需要类型为的scala对象Traversable<Tuple2<String, String>>

阿巴格尔

您可以在项目中添加“ snakeyaml”依赖项,以在Java中读取yaml文件。

 <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.17</version>
 </dependency>

现在,如果您具有“ application.yaml”文件,且其配置已定义(如您发布的那样),则可以阅读该文件并使用java中的setAll()方法创建SparkConf,如下所示。

import org.yaml.snakeyaml.Yaml;
import scala.collection.JavaConversions;

Yaml yaml = new Yaml();  
InputStream is = MySparkApplication.class.getClassLoader().getResourceAsStream("application.yaml");
Map<String, Object> yamlParsers = (Map<String, Object>) yaml.load(is);
LinkedHashMap<String,Object> spark = (LinkedHashMap<String,Object>) yamlParsers.get("spark"); 
LinkedHashMap<String,String> config = (LinkedHashMap<String,String>) spark.get("conf");
SparkConf conf = new SparkConf()
             .setAppName((String) spark.get("appname"))
             .setMaster((String) spark.get("master"))
             .setAll(JavaConversions.mapAsScalaMap(config));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为Apache Spark指定外部配置文件

如何加载Java属性文件并在Spark中使用?

用Spark加载CSV文件

如何使用Apache通用配置加载多个配置文件(Java)

如何配置Spring bean容器来加载Java属性文件?

从YAML配置文件仅加载一个部分

通过API或SDK应用配置Yaml文件

将Kubernetes yaml配置中定义的环境值传递给java spring配置文件

从Yaml文件加载Java Builder对象

从网址加载Yaml文件

从多个文件加载Flask配置

在Spring Boot Web项目中将Yaml文件加载到Map(而不是环境配置文件)的最佳方法是什么?

来自多个配置文件的Spark负载设置

如何从DI Extension类的Yaml配置文件中加载,处理和使用自定义参数?

在Cassandra中加载cassandra.yaml之外的其他配置文件

Spark从配置单元中选择还是从文件中选择更好?

Spark独立群集:配置分布式文件系统

使用Spark typesafe配置提交应用程序属性文件

配置通过Spark写入HDFS的Avro文件大小

从YAML配置文件获取密钥名

如何将yaml文件路径传递到不同的模块并基于模块加载配置

Spark:配置文件“ metrics.properties”

加载时如何验证YAML配置文件中的值?

spark-通过文件提交配置

从 java 配置加载额外的 spring 配置文件

加载 Java 配置文件的整个文件夹?

加载配置文件在 Java 中产生 null

Java:从 yaml 配置文件读取公钥时出现问题

spark作业的配置以写入3000000个文件作为输出