Seatunnel源码解析(2)-加载配置文件

本文详细解析了Seatunnel如何加载和解析配置文件,从命令行参数到ConfigBuilder,再到ConfigFactory的处理流程。文章还介绍了如何通过修改源码,使用内存数据Map加载配置,以及测试验证这一改动的过程。
摘要由CSDN通过智能技术生成

Seatunnel源码解析(2)-加载配置文件

需求

公司在使用Seatunnel的过程中,规划将Seatunnel集成在平台中,提供可视化操作。
因此目前有如下几个相关的需求:

  1. 可以通过Web接口,传递参数,启动一个Seatunnel应用
  2. 可以自定义日志,收集相关指标,目前想到的包括:应用的入流量、出流量;启动时间、结束时间等
  3. 在任务结束后,可以用applicationId自动从yarn上收集日志(一是手动收集太麻烦,二是时间稍长日志就没了)

材料

  1. Seatunnel:2.0.5

目前官方2版本还没有正式发布,只能自己下载源码编译。
从Github下载官方源码,clone到本地Idea
github:https://github.com/apache/incubator-seatunnel
官方地址:http://seatunnel.incubator.apache.org/
Idea下方Terminal命令行里,maven打包,执行:mvn clean install -Dmaven.test.skip=true
打包过程大约十几分钟,执行结束后,seatunnel-dist模块的target目录下,可以找到打好包的*.tar.gz压缩安装包

  1. Spark:2.4.8
  2. Hadoop:2.7

任意门

Seatunnel源码解析(1)-启动应用
Seatunnel源码解析(2)-加载配置文件
Seatunnel源码解析(3)-加载插件
Seatunnel源码解析(4) -启动Spark/Flink程序
Seatunnel源码解析(5)-修改启动LOGO

导读

本章将从源码角度,解读Seatunnel如何加载解析配置文件
进一步,尝试修改源码,修改配置文件加载方式,通过内存数据Map加载配置文件

解析封装命令行参数

public class SeatunnelSpark {
   
    public static void main(String[] args) throws Exception {
   
	    //sparkconf = 
	    	// --conf "spark.app.name=SeaTunnel" 
	    	//--conf "spark.executor.memory=1g" 
	    	//--conf "spark.executor.cores=1" 
	    	//--conf "spark.executor.instances=2"
	    //JarDepOpts = 
	    //FilesDepOpts = 
	    //assemblyJarName = /opt/seatunnel/lib/seatunnel-core-spark.jar
	    //CMD_ARGUMENTS = 
	    	//--master yarn 
	    	//--deploy-mode client 
	    	//--config example/spark.batch.conf
        CommandLineArgs sparkArgs = CommandLineUtils.parseSparkArgs(args);
        Seatunnel.run(sparkArgs, SPARK);
    }
}

创建配置类

命令行参数–conf的值,经过解析、封装、传递,在ConfigBuilder类中加载配置文件

public class Seatunnel {
   
    private static final Logger LOGGER = LoggerFactory.getLogger(Seatunnel.class);

    public static void run(CommandLineArgs commandLineArgs, Engine engine) throws Exception {
   
        
        String configFilePath = getConfigFilePath(commandLineArgs, engine);
        LOGGER.info("Seatunnel.run.self.configFilePath:" + configFilePath);
        ...
        entryPoint(configFilePath, engine);
        ...
    }
    
    private static void entryPoint(String configFile, Engine engine) throws Exception {
   
        ConfigBuilder configBuilder = new ConfigBuilder(configFile, engine);
        ...
    }
    ...
}

看ConfigBuilder的构造函数,configFile是–conf传入的配置文件的路径,engine是由启动脚本和入口程序确定的Spark/Flink

  • load():函数加载、解析、封装配置文件
  • createEnv():创建Spark/Flink对应的执行环境对象
  • new ConfigPackage(engine.getEngine()):按照包命名规则,拼接可能用到的包的引用路径
public class ConfigBuilder {
   

    private static final Logger LOGGER = LoggerFactory.getLogger(ConfigBuilder.class);

    private static final String PLUGIN_NAME_KEY = "plugin_name";
    private final String configFile;
    private final Engine engine;
    private ConfigPackage configPackage;
    private final Config config;
    private boolean streaming;
    private Config envConfig;
    private final RuntimeEnv env;

    public ConfigBuilder(String configFile, Engine engine) {
   
        this.configFile = configFile;
        this.engine = engine;
        // 根据配置文件路径,加载解析配置文件
        this.config = load();
        // 根据配置文件,创建对应的执行环境
        this.env = createEnv();
        // 根据对应的执行引擎,按照包命名规则,拼接包引用路径
        this.configPackage = new ConfigPackage(engine.getEngine());
    }
}

加载、解析配置文件 - load()

根据configFile(.conf文件的路径),最终生成Config对象

public class ConfigBuilder {
   
    private Config load() {
   
        ...
        // config/example/spark.batch.conf
        LOGGER.info("Loading config file: {}", configFile);
        Config config = ConfigFactory
                .parseFile(new File(configFile))
                .resolve(ConfigResolveOptions.defaults().setAllowUnresolved(true))
                .resolveWith(ConfigFactory.systemProperties()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值