内容简介:Motivation正如在交互式编程的讨论中提到的,用户应用程序可能由多个作业组成,需要很长时间才能完成。为了解决这个问题,我们想引入Flink Driver。
Motivation
正如在交互式编程的讨论中提到的,用户应用程序可能由多个作业组成,需要很长时间才能完成。 当前,当Flink运行具有多个作业的应用程序时,应用程序将在负责提交作业的本地进程中运行。 直到整个应用程序完成,该本地进程才会退出。 用户必须密切关注本地进程,以防它因连接丢失、会话超时、本地操作系统问题等而被终止。
为了解决这个问题,我们想引入Flink Driver。 用户可以使用 Driver 模式提交应用程序。 将提交Flink Driver 作业以处理用户应用程序中的作业提交。 Driver 模式本身不一定绑定到交互式编程。 但是,由于大多数使用交互式编程的应用程序都是长期运行的,因此 Driver 模式在这种情况下特别有用。
Goals
Driver 模式的目标:
-
在Flink Driver (运行用户程序的主要功能的Flink作业)中执行用户应用程序,这样用户就不需要长时间运行本地进程。
-
支持Flink当前支持的所有应用提交方式,独立集群或纱线/Kubernetes集群等。
-
当应用程序在 Driver 模式下运行时,可以查询应用程序状态。
Public Interfaces
所有公共接口更改都在./Flink run命令行上。
-
添加一个新选项-D/-Driver以启用 Driver 模式。
-
如果使用 Driver 模式,则为 Driver 作业添加以下新配置
-Dhm |
--driverheapmemory |
Driver task heap memory in MB |
-Ddm |
--driverdirectmemory |
Driver task direct memory in MB |
-Dc |
--drivercpus |
Driver task cpu cores. |
-Dnm |
--drivernativememory |
Driver task native memory in MB |
Proposed Changes
Current status of running applications
Flink提供了一个命令行接口(Command-Line Interface,CLI)来运行打包为JAR文件的应用程序。 根据用户是否提供现有Flink群集,存在两种情况:per作业模式和会话模式。
per-job
.bin/flink run application.jar
-
对于应用程序中的每个作业,将使用作业图部署Flink群集。 一旦部署完成,Flink群集将运行作业图。 作业完成后,群集将被销毁并回收
-
仅当用户应用程序中只有一个JobGraph时,Pre-job模式才起作用。
session-mode
.bin//flink run application.jar -m JM_ADDRESS
-
用户使用配置的作业管理器主机:端口或群集ID检索群集客户端,然后使用ClusterClient将作业提交到该群集。 作业完成后,Flink群集保持不变。
在通过命令行运行Flink应用程序时,用户还可以指定附加/分离模式的选项。 如果用户应用程序仅包含单个作业,则行为如下:
-
默认情况下,使用附加模式。 命令行进程将等到用户应用程序中的作业完成后再退出。
-
如果将-d( detached )指定为命令行参数,则提交用户应用程序中的作业后,命令行进程将退出,但不会等待作业完成。
如果用户应用程序中有多个作业,则附加/分离的行为实际上没有很好地定义,有时可能会令人困惑。 此外,用户还可以通过配置选项-s来指定用于恢复作业的保存点路径。 更多选项及其用法可在附录中找到。
Run applications with driver mode
与当前状态类似,只有当用户通过命令行运行其应用程序时, Driver 模式才可用。 我们想要引入一个新的选项-D/-Driver to./bin/Flink run。
以yarn模式为例,用户可以执行以下命令提交启用Flink Driver 的应用程序:
bin / flink run - m yarn - cluster - D - c { ENTRY_CLASS } { PATH_TO_APPLICATION_JAR }
Driver mode behavior
由于具有 Driver 模式的应用程序可能提交多个作业,因此不再支持当前的每作业模式。 因此,需要Flink群集才能在应用程序中运行作业。
当用户应用程序在 Driver 模式下运行时,将首先创建Flink Driver 作业以承载用户应用程序的主要功能。 然后,该作业将作为一个并行度设置为1的普通Flink作业提交给定的Flink集群。 然后,该 Driver 作业将调用用户主函数,并将用户应用程序中的作业提交给运行 Driver 作业本身的同一Flink群集。
下面是Flink Driver的整体情况:
由于所有作业都在同一群集中运行,因此用户可以使用REST API查询作业状态并获取应用程序进度。 由 Driver 作业提交的作业名称将具有用户定义的作业名称的前缀。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。