FLINK作业提交方式

Flink作业提交的方式分为application模式,per-job模式和session模式。

1.per-job模式

在Yarn创建一个Flink集群,然后在提交任务客户端所在机器本地运行作业jar的main方法,提交生成的JobGraph到Flink集群的JobManager。如果附带--detached参数,提交的作业被accept的时候,客户端会停止运行(命令行不用一直开着,生产环境必须。开发测试时可不带--detached参数,通过命令行查看运行日志)。

实际生产中推荐使用此模式。每个作业都使用单独的Flink集群,它们消耗的资源是互相隔离的,一个作业的崩溃不会影响到其他作业。

flink run -t yarn-per-job --detached /path/to/job.jar

2.session模式

首先启动Flink Yarn Session,它是一个常驻与Yarn的Flink集群。启动成功后,无论是否有作业执行,或者作业是否执行完毕,该session始终保持运行。启动yarn session的方法如下:

export HADOOP_CLASSPATH=`hadoop classpath` ./bin/yarn-session.sh --detached

yarn-session支持的相关参数解释:

  • -d/--detached: Detach模式,session启动成功后client停止运行。不用保持控制台一直开启。
  • -nm: Application名称
  • -jm: Job Manager 容器的内存
  • -tm: Task Manager 容器的内存</
<think>好的,用户想了解Apache Flink作业的执行流程。我需要根据提供的引用内容来构建一个详细的回答。首先,用户提到的三个引用中,引用[1]和[2]直接涉及Flink的执行流程和图形转换,引用[3]则关于窗口处理,可能与执行流程关系不大,但可能在某些阶段涉及。 首先,根据引用[1],Flink的执行流程分为四个阶段的图:DataFlow Graph、Optimized DataFlow Graph、JobGraph和ExecutionGraph。我需要详细解释每一层图的转换过程和功能。例如,DataFlow Graph是用户编写的程序逻辑转换而来的,Optimized进行优化,JobGraph是提交给JobManager的,而ExecutionGraph是并行化的实例。 然后,引用[2]提到StreamGraph可视化工具和operator的转换,这对应到DataFlow Graph阶段。用户可能想知道具体的转换步骤,比如如何从用户代码生成StreamGraph,再转化为JobGraph。这里需要结合代码示例或执行计划的生成过程,比如env.getExecutionPlan()的使用。 接下来,需要确保回答结构清晰,分阶段说明,并引用对应的文献。例如,在解释每个图的时候,标注引用[1]或[2]。另外,用户可能需要知道每个阶段的作用,比如优化阶段做了什么,如何调度到集群等。 另外,用户可能对并行度和资源分配感兴趣,这涉及到ExecutionGraph的部分,需要解释Task和Subtask的概念。同时,容错机制可能涉及检查点,但引用中没有提到,可能需要避免深入。 最后,生成相关问题需要考虑用户可能的后续疑问,比如各图之间的区别、如何优化性能、并行度设置和错误处理机制。这些问题应基于已解释的内容,引导用户进一步了解。 需要检查是否符合格式要求,行内公式用$,独立公式用$$,但当前内容可能较少涉及数学公式,所以可能不需要。确保使用中文,代码块用正确语法,如Python示例。但用户的问题中未涉及代码,可能不需要代码块,但如果有例子可以加入。 总结回答结构:分四层图详细说明,每部分包含定义、转换过程和功能,引用对应的文献,最后生成相关问题。</think>### Apache Flink 作业执行流程详解 Apache Flink 作业的执行流程通过**四层图模型**实现从用户代码到分布式任务调度的转换。以下是各阶段的详细说明: --- #### 1. **DataFlow Graph(逻辑数据流图)** - **定义**:由用户编写的程序(如DataStream/DataSet API)转换而成,反映原始逻辑结构。例如,`map`、`filter`、`window`等操作符按代码顺序连接。 - **特点**: - 包含**算子(Operator)**和**数据流(DataStream)**的依赖关系。 - 未进行任何优化,仅表示程序逻辑[^1]。 - **示例**:若代码包含`Source → Map → Window → Sink`,生成的DataFlow Graph会明确体现这一链路。 --- #### 2. **Optimized DataFlow Graph(优化后的逻辑图)** - **转换过程**:Flink 对DataFlow Graph应用优化规则,如: - **算子融合(Operator Chaining)**:将多个算子合并为一个Task,减少序列化开销。 - **谓词下推(Predicate Pushdown)**:提前过滤数据以减少后续计算量。 - **目标**:提升执行效率,但尚未涉及物理资源分配[^1]。 --- #### 3. **JobGraph(作业图)** - **生成方式**:优化后的逻辑图被转换为JobGraph,提交至**JobManager**。 - **关键变化**: - **Task划分**:将多个Operator合并为**JobVertex**(例如,`Source + Map`合并为一个顶点)。 - **数据交换**:定义Task间的数据传输方式(如Forward、Hash、Broadcast)[^1][^2]。 - **示例**:通过`env.getExecutionPlan()`可生成可视化执行计划[^2]。 --- #### 4. **ExecutionGraph(执行图)** - **并行化**:JobManager根据并行度将JobGraph展开为ExecutionGraph。 - 每个JobVertex拆分为多个**ExecutionVertex**(对应一个Subtask)。 - 数据流边(Edge)扩展为实际的数据传输通道。 - **调度**:ExecutionGraph被拆分为**Task**,分配至**TaskManager**的Slot中执行[^2]。 --- #### 执行流程总结 ``` 用户代码 → DataFlow Graph → 优化 → JobGraph → 并行化 → ExecutionGraph → 调度执行 ``` --- ### 相关问题 1. Flink 的**算子融合(Operator Chaining)**如何提升性能? 2. 如何通过**调整并行度**优化Flink作业的资源利用率?[^2] 3. Flink 如何处理数据流的**无序事件**?[^3] 4. **JobManager**和**TaskManager**在作业执行中的具体职责是什么?[^1] --- 通过上述四层图的转换,Flink 实现了从逻辑描述到分布式任务的高效执行,同时支持动态优化与容错机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值