33

FLIP-40: Flink Driver

 4 years ago
source link: https://www.tuicool.com/articles/fqaqQfa
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Motivation

正如在交互式编程的讨论中提到的,用户应用程序可能由多个作业组成,需要很长时间才能完成。 当前,当Flink运行具有多个作业的应用程序时,应用程序将在负责提交作业的本地进程中运行。 直到整个应用程序完成,该本地进程才会退出。 用户必须密切关注本地进程,以防它因连接丢失、会话超时、本地操作系统问题等而被终止。

为了解决这个问题,我们想引入Flink Driver。 用户可以使用 Driver 模式提交应用程序。 将提交Flink  Driver 作业以处理用户应用程序中的作业提交。 Driver 模式本身不一定绑定到交互式编程。 但是,由于大多数使用交互式编程的应用程序都是长期运行的,因此 Driver 模式在这种情况下特别有用。

AbuMfeA.jpg!web

Goals

Driver 模式的目标:

  1. 在Flink Driver (运行用户程序的主要功能的Flink作业)中执行用户应用程序,这样用户就不需要长时间运行本地进程。

  2. 支持Flink当前支持的所有应用提交方式,独立集群或纱线/Kubernetes集群等。

  3. 当应用程序在 Driver 模式下运行时,可以查询应用程序状态。

Public Interfaces

所有公共接口更改都在./Flink run命令行上。

  • 添加一个新选项-D/-Driver以启用 Driver 模式。

  • 如果使用 Driver 模式,则为 Driver 作业添加以下新配置

-Dhm

--driverheapmemory <arg>

Driver task heap memory in MB

-Ddm

--driverdirectmemory <arg>

Driver task direct memory in MB

-Dc

--drivercpus <arg>

Driver task cpu cores.

-Dnm

--drivernativememory <arg>

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的整体情况:

i6NzqeA.jpg!web

由于所有作业都在同一群集中运行,因此用户可以使用REST API查询作业状态并获取应用程序进度。 Driver 作业提交的作业名称将具有用户定义的作业名称的前缀。

AbuMfeA.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK