如何将 Flink 作业提交到远程 YARN 集群?

How to submit Flink job to a remote YARN cluster?

我使用 Apache Ambari 在 4 节点上安装了 Apache Hadoop。我用 Apache Flink 写了一个简单的作业。我想将此作业提交到我的 YARN 集群。但是 Flink 需要在本地机器上 YARN 配置文件(core-site.xml、yarn-site.xml 等)。所以如果我没有误解的话,有两种手动方式

  1. 在 ResourceManager 节点上启动 flink 作业(以查找配置文件)
  2. 从 ResourceManager 下载配置文件到本地。

我觉得,这两种方式都不是很好。如何将作业提交到远程 YARN 集群。有合适的方法吗?

我认为更多的是关于启动 Flink 的 YARN 客户端的问题,而不是 Flink 本身。

我对 Flink 知之甚少,但鉴于我对 YARN 上的 Spark 的了解,我可以说你只能做 2,即将配置文件下载到你将用来启动 Flink 应用程序的机器上。您还可以使用 YARN 集群中的边缘机器作为部署应用程序的机器。

同样,我认为更多的是关于如何将应用程序部署到 YARN 的问题。

在 Hadoop/YARN 世界中,您始终需要客户端计算机上的配置文件。因此,您需要在本地获取它们。但是,您通常需要其中一些而不是全部。在大多数情况下,hdfs-site.xml、core-site.xml 和 yarn-site.xml 就足够了——如果我没记错的话。为了安全起见,将它们全部复制到本地目录中。

然后在你机器上的flink-conf.yaml文件中配置如下参数,它会起到client的作用,aka。你将从开始你的工作。

fs.hdfs.hadoopconf: path_to_hadoop_conf_dir

然后您应该可以通过告诉 flink 工具使用 yarn-master 作为作业管理器来启动 YARN 作业。

flink run -m yarn-cluster -yn <num_task_managers> -yjm <job_manager_memory> -ytm <task_manager_memory -c <main_class> <jar>

如果您在 flink-conf.yaml 中配置了上述内存参数,则应该可以通过省略所有这些冗长的参数来使用默认值启动作业

flink run -m yarn-cluster -n <num_task_managers> -c <main_class> <jar>

作为快速测试,您可以尝试在 YARN 上启动 Scala shell。

start-scala-shell.sh yarn -n <num_task_managers> -nm test_job