Flink参数传递以及配置读取

ParameterTool

Flink--1.7以及以后
org.apache.flink.api.java.utils.ParameterTool
1.使用ParameterTool规避static变量初始化
 ParameterTool提供了一系列预定义的静态方法来读取配置信息,
   ParameterTool内部是一个Map<String, String>,所以很容易与你自己的配置形式相集成
 ParameterTool是可序列化
 使用外部参数 
    final ParameterTool parameterTool = ParameterTool.fromArgs(args);
    if (parameterTool.getNumberOfParameters() < 3) {
        System.out.println("Missing parameters!\n" +
            "Usage: --numRecords <numRecords> --index <index> --type <type>");
        return;
    }

 parameterTool.getInt("numRecords")
   使用parameterTool来承接main函数的参数,通过env来设置全局变量来进行分发,
   那么在继承了rich函数的逻辑中就可以使用这个全局参数

 方法:
    public static ParameterTool 
        fromPropertiesFile
        fromMap
        fromSystemProperties
        getNumberOfParameters
        getRequired getConfiguration  getProperties
        get getByte  getInt getShort  getLong  getFloat  getDouble  getBoolean
        has
        addToDefaults  createPropertiesFile
eg
  // .properties文件中获取
   String propertiesFile = "/home/flink/myJob.properties";
      ParameterTool parameter = ParameterTool.fromPropertiesFile(propertiesFile);
    // 从命令行参数中获取   --outputPath hdfs:///mydata --elements 42这种形式的参数
    // -- Keys have to start with '-' or '--'
    final ParameterTool params = ParameterTool.fromArgs(args);
    final String outputPath = params.getRequired("outputPath");
    //使用的情况--设置环境--使用env.getConfig().setGlobalJobParametersParameterTool的访问范围设置为global
      ParameterTool parameters = ParameterTool.fromArgs(args);
      final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
      env.getConfig().setGlobalJobParameters
       ParameterTool parameters = (ParameterTool) getRuntimeContext().getExecutionConfig().getGlobalJobParameters();
       parameters.getRequired("input");

Configuration

Flink 1.3      org.apache.flink.configuration.Configuration
步骤: 在main函数中定义变量
 步骤   继承自一个rich的function,这样才可以在open方法中获取相应的参数
  // Class in Flink to store parameters
     Configuration configuration = new Configuration();

使用 broadcast 变量

 进行广播的数据集
 进行广播的目的地

其他情况

public static void main(String[] args){
  if(args.length != 3) {
          logger.error("");
          System.exit(1);
      }
      String stuName    = args[0];
      String statisDate = args[1];
      String gradeName  = args[2];
}

参考:

如何在flink中传递参数  https://www.cnblogs.com/029zz010buct/p/10362451.html

他山之玉

 代码的套路:操千曲而后晓声,观千剑而后识器

blogroll

social