Flink流批一体计算(8):Flink常见Shell命令

目录

CLI列表 

Job生命周期管理 

提交一个Job

Job 检测

创建Savepoint

删除Savepoint 

终止作业

正常停止作业创建最终Savepoint

取消作业

从保存点启动作业

三种作业提交模式

三种模式提交并查看作业

Session模式提交并查看作业

Per-Job Cluster模式提交并查看作业

Application模式提交并查看作业


Flink提供了一个命令行界面(CLI)bin/Flink,用于运行打包为JAR文件的程序并控制其执行。CLI是任何Flink设置的一部分,可在本地单节点设置和分布式设置中使用。它连接到conf/flink-conf.yaml中指定的正在运行的JobManager。

CLI列表 

操作 用途
yarn-session.sh 使用yarn-session.sh启动一个常驻的Flink集群,接受来自客户端提交的任务。
run 提交Flink作业,作业既可以被提交到一个常驻的Flink集群上,也可以使用单机模式运行。
run-application Application模式执行作业。
info 用于打印作业的优化执行图。同样,需要传递作业的jar
list 列出所有的作业(包含JobID
savepoint 用于为给定作业创建或处理保存点。如果conf/flink-conf.yaml中未指定state.savepoints.dir参数,则可能需要在JobID之外指定一个保存点目录。
cancel 取消作业
stop 停止作业(仅流式作业)

Job生命周期管理 

使用Flink CLI的先决条件是拥有一个可运行Flink集群,他部署在如KubernetesYARN或任何其他可用选项。可以在本地启动Flink集群,在自己的机器上尝试命令。

提交一个Job

提交一个Job意味着将作业的JAR和相关依赖项上传到Flink集群并启动Job执行。例如,我们选择了一个长时间运行的作业,比如examples/streaming/StateMachineExample.jar。可以从examples/文件夹中选择任何其他jar文件部署自己的job

$ ./bin/flink run \
      --detached \
      ./examples/streaming/StateMachineExample.jar

使用--detached提交Job将使命令在提交完成后返回,输出包含新提交JobID

Job has been submitted with JobID cca7bc1061d61cf15238e92312c2fc20

打印的使用信息列出了与作业相关的参数,如果需要,可以将这些参数添加到作业提交命令的末尾。

还有一个run-application的命令可用于在Application Mode下运行作业,它的工作方式与run类似。

runrun-application命令支持通过-D接受其他配置参数。例如,可以通过设置-Dpipeline.max parallelism=120来设置作业的最大并行度。此参数在per-job 或者 application模式下非常有用,因为您可以将任何配置参数传递给集群,而无需更改配置文件。

session模式下提交作业时,仅支持执行配置参数。

Job 检测

你可以用如下命令检测任何运行的Job

$ ./bin/flink list

所有已提交但没有执行的Job都在Scheduled Jobs列表下。

创建Savepoint

可以创建保存点来保存作业的当前状态。只需JobID:

$ ./bin/flink savepoint \
      $JOB_ID \
      /tmp/flink-savepoints

保存点文件夹是可选的,如果未设置state.savepoints.dir,则需要指定该文件夹。

保存点的路径可以稍后用于重新启动Flink作业。

删除Savepoint 

删除保存点,--需要添加带有相应保存点路径的命令--dispose

$ ./bin/flink savepoint \
      --dispose \
      /tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab \
      $JOB_ID

如果使用自定义状态实例(例如自定义reducing 状态或RocksDB状态),则必须指定用于触发Savepoint的程序JAR的路径。否则,您将遇到ClassNotFoundException

$ ./bin/flink savepoint \
      --dispose <savepointPath> \
      --jarfile <jarFile>

通过Savepoint操作触发Savepoint处理不仅会从存储中删除数据,还会使Flink清理与Savepoint相关的元数据。

终止作业

正常停止作业创建最终Savepoint

这是一种更优雅的方式结束正在运行的流作业,从而结束从sourcesink的流。当用户请求停止作业时,所有source都将被请求发送最后一个checkpoint barrier,从而触发checkpoint,在成功完成该checkpoint后,它们将通过调用cancel()来完成终结Job

$ ./bin/flink stop \
      --savepointPath /tmp/flink-savepoints \
      $JOB_ID

Suspending job "cca7bc1061d61cf15238e92312c2fc20" with a savepoint.

Savepoint completed. Path: file:/tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab

如果未设置state.savepoints.dir,则必须使用--savepointPath指定保存点文件夹。

如果指定了--drain标志,则将在最后一个检查点屏障之前发出MAX_WATERMARK。这将触发所有已注册的事件时间计时器,从而清除任何等待特定水印的状态,例如窗口。作业将一直运行,直到所有源正确关闭。这允许作业完成对所有运行中数据的处理,以便在停止时,对保存点之后的数据进行处理。

如果要永久终止作业,请使用--drain标志。如果希望稍后恢复作业,请不要使用--drain,因为这可能会导致错误的结果。

取消作业

取消作业可以通过取消操作实现:

$ ./bin/flink cancel $JOB_ID

Cancelling job cca7bc1061d61cf15238e92312c2fc20.

Cancelled job cca7bc1061d61cf15238e92312c2fc20.

相应作业的状态将从“正在运行”转换为“已取消”。任何计算都将停止。

从保存点启动作业

可以使用run(和run-application)操作从保存点启动作业。

$ ./bin/flink run \
     --detached \
     --fromSavepoint /tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab \
     ./examples/streaming/StateMachineExample.jar

看上去,除--fromSavepoint参数外,该命令如何与初始运行命令相同,--fromSavepoint该参数用于引用先前停止的作业的状态,将生成可用于维护作业的新作业ID

默认情况下,我们尝试将整个保存点状态与正在提交的作业相匹配。如果希望允许跳过无法还原的保存点状态,可以设置--allowNonRestoredState标志。如果在触发保存点时从程序中删除了作为程序一部分的运算符,并且仍希望使用保存点,则需要允许此操作。

$ ./bin/flink run \
      --fromSavepoint <savepointPath> \
      --allowNonRestoredState ...

如果您的程序删除了作为保存点一部分的运算符,这将非常有用。

三种作业提交模式

模式

描述

特点

Session

模式

Seesion模式会根据您设置的资源参数创建一个Flink集群,所有作业都将被提交到这个集群上运行。该集群在作业运行结束之后不会自动释放。

例如,某个作业发生异常,导致一个Task Manager关闭,则其他所有运行在该Task Manager上的作业都会失败。另外由于同一个集群中只有一个Job Manager,随着作业数量的增多,Job Manager的压力会相应增加。

优点:提交作业时,资源分配导致的时间开销相比其他模式较小。

缺点:由于所有作业都运行在该集群中,会存在对资源的竞争以及作业间的相互影响。

根据以上特点,该模式适合部署需要较短启动时间且运行时间相对较短的作业。

Per-Job Cluster

模式

当使用Per-Job Cluster模式时,每次提交一个Flink作业,YARN都会为这个作业新启动一个Flink集群,然后运行该作业。当作业运行结束或者被取消时,该作业所属的Flink集群也会被释放。

优点:作业之间资源隔离,一个作业的异常行为不会影响到其他作业。因为每个作业都和一个Job Manager一一对应,因此不会出现一个Job Manager因为运行多个Job而导致负载过高的问题。

缺点:每次运行一个作业都要启动一个专属Flink集群,启动作业的开销更大。

根据以上特点,该模式通常适合运行时间较长的作业。

Application模式

当使用Application模式时,每次提交一个Flink Application(一个Application包含一个或多个作业),YARN都会为这个Application新启动一个Flink集群。当Application运行结束或者被取消时,该Application所属的Flink集群也会被释放。

该模式与Per-Job模式不同的是,Application对应的JAR包中的main()方法会在集群中的Job Manager中被执行。

如果提交的JAR包中包含多个作业,则这些作业都会在该Application所属的集群中执行。

优点:可以减轻客户端提交作业时的负担。

缺点:每次运行一个Flink Application都要启动一个专属Flink集群,启动Application的时间开销会更大。

三种模式提交并查看作业

Session模式提交并查看作业

  • 执行以下命令,启动YARN Session。
yarn-session.sh --detached
  • 执行以下命令,提交作业。
flink run /opt/apps/FLINK/flink-current/examples/streaming/TopSpeedWindowing.jar

说明:本文使用Flink自身提供的TopSpeedWindowing示例进行介绍,该示例是一个会长时间运行的流作业。
提交成功后,会返回已提交的Flink作业的YARN Application ID。返回如下类似信息。 

  • 执行以下命令,查看作业状态。
flink list -t yarn-session -Dyarn.application.id=<application_XXXX_YY>

您也可以通过Web UI的方式查看作业状态。

  • 执行以下命令,停止作业。
flink cancel -t yarn-session -Dyarn.application.id=<application_XXXX_YY> <jobId>

Per-Job Cluster模式提交并查看作业

  •  执行以下命令,提交作业。
flink run -t yarn-per-job --detached /opt/apps/FLINK/flink-current/examples/streaming/TopSpeedWindowing.jar

提交成功后,会返回已提交的Flink作业的YARN Application ID。返回如下类似信息。 

  • 执行以下命令,查看作业状态。
flink list -t yarn-per-job -Dyarn.application.id=<application_XXXX_YY>

说明 本文示例中的<application_XXXX_YY>为作业运行后返回的Application ID。
您也可以通过Web UI的方式查看作业状态,详情请参见通过Web UI查看作业状态。

  • 执行以下命令,停止作业。
flink cancel -t yarn-per-job -Dyarn.application.id=<application_XXXX_YY> <jobId>

Application模式提交并查看作业

  • 执行以下命令,提交作业。
flink run-application -t yarn-application /opt/apps/FLINK/flink-current/examples/streaming/TopSpeedWindowing.jar

提交成功后,会返回已提交的Flink作业的YARN Application ID。返回如下类似信息。 

  • 执行以下命令,查看作业状态。
flink list -t yarn-application -Dyarn.application.id=<application_XXXX_YY>

您也可以通过Web UI的方式查看作业状态,详情请参见通过Web UI查看作业状态。

  • 执行以下命令,停止作业。
flink cancel -t yarn-application -Dyarn.application.id=<application_XXXX_YY> <jobId>

猜你喜欢

转载自blog.csdn.net/victory0508/article/details/131437236