Flink on Yarn 原理剖析

本文深入探讨了Flink的架构,包括Job、JobManager和TaskManager,并详细解析了Flink在Yarn上的运行原理,涵盖Yarn的架构、组件交互以及Flink的Per Job和Session模式,阐述了不同模式的应用场景和Yarn模式的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flink 架构概览

1、Flink 架构概览 —— Job

在这里插入图片描述
用户通过 DataStream API、DataSet API、SQL 和 Table API 编写 Flink 任务,Client 端会生成一个 JobGraph。JobGraph 是由 source、map()、keyBy()/window()/apply() 和 Sink 等算子组成的。当 JobGraph 提交给 Flink 集群后,能够以 Local、Standalone、Yarn 和 Kubernetes 四种模式运行。


2、Flink 架构概览 —— JobManager

在这里插入图片描述
JobManager 的功能主要有:

  • 将 JobGraph 转换成 Execution Graph,最终将 Execution Graph 拿来运行;
  • Scheduler 组件负责 Task 的调度;
  • Checkpoint Coordinator 组件负责协调整个任务的 Checkpoint,包括 Checkpoint 的开始和完成;
  • 通过 Actor System 与 TaskManager 进行通信;
  • 其他的一些功能,例如 Recovery Metadata,用于进行故障恢复时,可以从 Metadata 里面读取数据。

3、Flink 架构概览 —— TaskManager

在这里插入图片描述
TaskManager 是负责具体任务的执行过程,在 JobManager 申请到资源之后开始启动。

TaskManager 里面的主要组件有:

  • Memory & I/O Manager,即内存 I/O 的管理;
  • Network Manager,用来对网络方面进行管理;
  • Actor System,用来负责网络的通信;
  • TaskSlot,每个任务都有运行在 TaskSlot 里面,TaskSlot 是调度资源里的最小单位。<
Flink 1.15 on YARN 的部署模式下,将日志收集到 HDFS 是实现任务监控和异常实时感知的重要手段。以下是一些关键配置方法与步骤: ### 配置 YARN 日志聚合功能 YARN 提供了日志聚合(Log Aggregation)功能,可以将 TaskManager 和 JobManager 的日志集中存储到 HDFS 中。需要在 `yarn-site.xml` 文件中启用该功能: ```xml <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> ``` 启用后,Flink 任务执行期间的日志会在任务结束后统一上传到 HDFS 指定路径[^2]。 此外,还可以通过以下参数设置日志的存储路径和保留时间: ```xml <property> <name>yarn.nodemanager.remote-app-log-dir</name> <value>/logs/yarn</value> <!-- HDFS 上日志存储路径 --> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> <!-- 日志保留时间,默认为一天 --> </property> ``` ### Flink 自定义日志输出路径 Flink 允许通过配置 `log4j.properties` 或 `logback.xml` 文件来指定日志输出路径。可以在 Flink 配置目录下的 `log4j.properties` 文件中修改日志输出路径,将其指向本地磁盘或 HDFS 路径: ```properties log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=file:///path/to/flink/logs/flink-taskmanager.log ``` 如果希望直接写入 HDFS,则需要使用 Hadoop 的 HDFS 客户端支持,例如: ```properties log4j.appender.hdfs=org.apache.log4j.DailyRollingFileAppender log4j.appender.hdfs.File=hdfs://namenode/path/to/flink/logs/flink-taskmanager.log ``` 确保 Flink 的运行环境中有 Hadoop 配置文件(如 `core-site.xml` 和 `hdfs-site.xml`),以便访问 HDFS。 ### 使用外部日志收集系统 为了实现实时日志收集和报警,可以集成 ELK Stack(Elasticsearch, Logstash, Kibana)或 Fluentd 等工具。这些工具可以从本地磁盘或 HDFS 中读取日志,并进行实时分析和报警。 - **Logstash**:可以从本地文件或 HDFS 中读取日志数据,并发送到 Elasticsearch。 - **Fluentd**:提供灵活的日志收集管道,支持从多种来源读取日志并转发到多个目的地。 例如,Logstash 的配置示例: ```yaml input { file { path => "/path/to/flink/logs/*.log" start_position => "beginning" } } output { elasticsearch { hosts => ["http://elasticsearch:9200"] index => "flink-logs-%{+YYYY.MM.dd}" } } ``` ### 监控与报警机制 通过集成 Prometheus + Grafana 可以实现对 Flink 任务的指标监控,同时结合 Alertmanager 实现日志异常报警。 - **Prometheus**:可以通过 JMX Exporter 收集 Flink 的 JVM 指标。 - **Grafana**:用于可视化监控数据。 - **Alertmanager**:根据预设规则触发报警。 ### 示例代码:JMX Exporter 配置 在启动 Flink 任务时添加 JMX Exporter 参数: ```bash -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -javaagent:/path/to/jmx_prometheus_javaagent.jar=9010:/path/to/config.yaml ``` 其中 `config.yaml` 文件定义了需要暴露的指标。 ### 总结 通过以上方法,可以在 Flink 1.15 on YARN 的环境下实现日志的有效管理和实时监控。具体包括: 1. 启用 YARN 的日志聚合功能,将日志上传至 HDFS。 2. 自定义 Flink 日志输出路径,确保日志写入 HDFS。 3. 集成外部日志收集系统(如 ELK Stack 或 Fluentd)进行实时分析。 4. 利用 Prometheus + Grafana 实现指标监控和报警。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值