【问题标题】:Custom configuration file flink-conf.yaml自定义配置文件 flink-conf.yaml
【发布时间】:2021-07-27 19:16:49
【问题描述】:

我需要为不同的应用程序指定不同的 Flink 设置。换句话说,每个应用程序都应该使用其自定义文件flink-conf.yaml 运行。正确的做法是什么?

我发现了一些旧的建议来声明 FLINK_CONF_DIR 指向带有 Flink 配置文件的自定义目录(例如:How could I override configuration value in Apache Flink?)。然而,官方的 Flink 文档根本没有提到 FLINK_CONF_DIR 变量(从 Flink 1.13 开始)。所以我怀疑这种方式是否被 Flink 开发者官方推荐和支持。

更新 1:有关应用程序运行的详细信息

我在 Application mode 的 YARN 上运行 Flink。以下是我启动应用程序的方式:

"$flink_home/bin/flink" \
  run-application \
  --target yarn-application \
  --class com.example.App1

开箱即用的 Flink 配置位于 $flink_home/conf 目录中。由于我有几个应用程序 App1、App2、...,我希望它们使用各自的 Flink 配置,而不是开箱即用的配置。

【问题讨论】:

标签: apache-flink


【解决方案1】:

TL;DR:当 Flink on YARN 文档为 Flink 1.12 版本重写时,关于 FLINK_CONF_DIR 的段落被意外删除。它仍然是在 YARN 集群中建立每个应用程序设置的预期和受支持的方式。


其他覆盖配置的方法:

您可以使用您在命令行中指定的设置覆盖集群的flink-conf.yaml 文件中指定的设置,如this answer 中所述。

您还可以在代码中覆盖全局配置中的特定设置,例如:

Configuration conf = new Configuration();
conf.setString("state.backend", "filesystem");
env = StreamExecutionEnvironment.getExecutionEnvironment(conf);

您还可以通过

从您的应用程序代码中加载flink-conf.yaml 文件中的所有设置
FileSystem.initialize(GlobalConfiguration.loadConfiguration("/path/to/conf/directory"));

使用 Kubernetes,您可以为不同的应用程序挂载不同的 ConfigMap。

【讨论】:

  • 我正在使用应用程序模式(更新了帖子以提供更多详细信息)。您是否建议为每个应用程序制作单独的 Flink 分发目录副本?
  • 当我这么说的时候,我想象的是 kubernetes,而不是 yarn。
  • 根据我对代码的快速调查可以看出,FLINK_CONF_DIR 应该仍然适用于纱线。
  • 使用 Kubernetes,可以为不同的应用程序在 $flink_home/conf 下挂载不同的 ConfigMap——这很清楚。
  • 我与重写这些文档的开发人员进行了核对,并了解到 FLINK_CONF_DIR 的提及被意外删除了。他会恢复它。
猜你喜欢
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多