flink源码导读

60 阅读1分钟

一、flink通过per-job启动后有几大进程

  • CliFrontend 对应主类:org.apache.flink.client.cli.CliFrontend 通过 "$bin"/config.sh 加载环境配置
  • taskExecutorRunner
  • YarnJobClusterEntrypoint

二、客户端类详细解读及细节

Implementation of a simple command line frontend for executing programs
实现一个面前前端的用于执行程序的简单命令行

// 1. find the configuration directory
/**
 * todo 获取flink的conf目录
 */
final String configurationDirectory = getConfigurationDirectoryFromEnv();

// 2. load the global configuration
/** TODO 根据配置加载全局配置项 */
final Configuration configuration =
        GlobalConfiguration.loadConfiguration(configurationDirectory);

// 3. load the custom command lines
/** TODO 封装命令行 generic、yarn、default */
final List<CustomCommandLine> customCommandLines =
        loadCustomCommandLines(configuration, configurationDirectory);
   

// TODO 根据之前添加的顺序判断 generic、yarn、default 获取活跃的命令行
final CustomCommandLine activeCommandLine =
        validateAndGetActiveCommandLine(checkNotNull(commandLine));

final ProgramOptions programOptions = ProgramOptions.create(commandLine);

// TODO 获取用户jar包和其它依赖
final List<URL> jobJars = getJobJarAndDependencies(programOptions);

final Configuration effectiveConfiguration =
        getEffectiveConfiguration(activeCommandLine, commandLine, programOptions, jobJars);

LOG.debug("Effective executor configuration: {}", effectiveConfiguration);

try (PackagedProgram program = getPackagedProgram(programOptions, effectiveConfiguration)) {
    // 执行用户程序
    executeProgram(effectiveConfiguration, program);
}