在flink的job开发里面,ParameterTool是一个使用频率比较高的工具类,这个工具类其实就是一个配置的map。在flink job里面,我们自定义的很多类都需要依赖外部传递参数,这时候,在自定义的类里面我们可以直接读取对应的配置信息进行后续处理即可。那么ParameterTool怎么用呢?
一、使用ParameterTool加载配置信息
ParameterTool本身就是一个map,所以他加载的数据也要是map结构,即key-value的数据结构。ParameterTool的配置加载途径有:命令行/配置文件/自定义map/系统。具体示例如下:
ParameterTool.fromArgs(args); // 这里是从命令行加载信息 ParameterTool.fromMap(new HashedMap()); // 这里是从自定义的map里面加载信息 ParameterTool.fromPropertiesFile(new File("/aaaa/aaa.properties")); // 这里是从某个文件里面加载信息 ParameterTool.fromSystemProperties(); //这里是从系统里面获取默认的配置信息
二、从ParameterTool里面读取配置信息
我们前面提过,使用ParameterTool加载完配置之后,在需要使用到配置信息的时候,我们直接读取即可。这里的ParameterTool是一个map,所以读取方式和map的读取是一模一样的。具体示例如下:
ParameterTool tool = ParameterTool.fromArgs(args); String name = tool.get("name", "zhangsan");
三、job全局读取ParameterTool的配置
在实际的场景里面,我们比如自定义了一个类MysqlSource,这个类里面的open是无法直接把ParameterTool传递进来的,那么此时我们怎么办呢?
3.1、第一种方式:直接构造一个传递ParameterTool参数的构造方法
示例如下:
private ParameterTool tool; public MysqlSource(ParameterTool tool) { this.tool = tool; }
这时候通过构造参数的方式把tool传递进来,在使用的时候我们直接使用tool变量即可。但是这样的话,我们在main方法里面,每次new的时候都需要进行参数传递,看起来不太雅观,怎么办呢?那就是第二种方法。
3.2、第二种方式:构造一个全局的ParameterTool
这个构造全局的ParameterTool的意思就是在main方法里面直接执行下
ParameterTool tool = ParameterTool.fromArgs(args); ExecutionEnvironment environment = ExecutionEnvironment.getExecutionEnvironment(); environment.getConfig().setGlobalJobParameters(tool);
然后我们在任何需要使用到配置的自定义类里面,我们直接取这个tool出来即可。示例代码如下:
ParameterTool tool = (ParameterTool) getRuntimeContext().getExecutionConfig().getGlobalJobParameters(); String name = tool.get("name", "zhangsan");
还没有评论,来说两句吧...