想了解流计算,你必须得看一眼,实现Flink on Yarn的三种部署方式,并运行wordcount

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: 想了解流计算,你必须得看一眼,实现Flink on Yarn的三种部署方式,并运行wordcount

1. 第一种方式:YARN session

1.1 说明

1.1.1 yarn-session.sh(开辟资源)+flink run(提交任务)

这种模式下会启动yarn session,并且会启动Flink的两个必要服务:JobManager和Task-managers,然后你可以向集群提交作业。同一个Session中可以提交多个Flink作业。需要注意的是,这种模式下Hadoop的版本至少是2.2,而且必须安装了HDFS(因为启动YARN session的时候会向HDFS上提交相关的jar文件和配置文件)

1.1.2 通过./bin/yarn-session.sh脚本启动YARN Session

脚本可以携带的参数:
-n(--container):TaskManager的数量。(1.10 已经废弃)
-s(--slots): 每个TaskManager的slot数量,默认一个slot一个core,默认每个taskmanager的slot的个数为1,有时可以多一些taskmanager,做冗余。
-jm:JobManager的内存(单位MB)。
-q:显示可用的YARN资源(内存,内核);
-tm:每个TaskManager容器的内存(默认值:MB)
-nm:yarn 的appName(现在yarn的ui上的名字)。
-d:后台执行
注意:
如果不想让Flink YARN客户端始终运行,那么也可以启动分离的 YARN会话。该参数被称为-d或--detached。

==确定TaskManager数==:
Flink on YARN时,TaskManager的数量就是:max(parallelism) / yarnslots(向上取整)。例如,一个最大并行度为10,每个TaskManager有两个任务槽的作业,就会启动5个TaskManager。

1.2 启动

1.2.1 yarn-session.sh(开辟资源)

cd /export/server/flink/
bin/yarn-session.sh -tm 1024  -s 4 -d

参数说明

     -n 表示申请2个容器,这里指的就是多少个taskmanager
     -tm 表示每个TaskManager的内存大小
     -s 表示每个TaskManager的slots数量
     -d 表示以后台程序方式运行

解释
上面的命令的意思是,每个 TaskManager 拥有4个 Task Slot(-s 4),并且被创建的每个 TaskManager 所在的YARN Container 申请 1024M 的内存,同时额外申请一个Container用以运行ApplicationMaster以及Job Manager。

1.2.2 执行wordcount(提交任务)

bin/flink run -p 8 examples/batch/WordCount.jar

解释
-p 为8,并行度为 8 , 上面在开辟资源时,指定的
-s 为4 每个TaskManager 有4个slot, 几个并行就需要几个slot, 所以我们这次的案例会用到 2个TaskManager 。

1.2.3 启动成功之后,控制台显示

在这里插入图片描述
JobManager Web Interface:后面的信息就是你可以访问到flink界面的信息。

==此为flink的web界面==
在这里插入图片描述

1.2.4 去yarn页面

ip:8088可以查看当前提交的flink session
在这里插入图片描述

虽然程序运行完了,但是转态依然是==running== ,最终状态是==undefined==,意味着资源依然被占用,程序没有终止。

1.2.5 停止当前任务

yarn application -kill application_1641050549691_0002

1.5.7.2.在这里插入图片描述

2. 第二种方式:Per-Job

2.1 在YARN上运行一个Flink作业

这里我们还是使用./bin/flink,但是==不需要==事先启动YARN session:
直接提交job

cd /export/server/flink/
bin/flink run -m yarn-cluster -yjm 1024 -ytm 1024 examples/batch/WordCount.jar

参数说明

-m jobmanager的地址
-yjm 1024 指定jobmanager的内存信息
-ytm 1024 指定taskmanager的内存信息

其他参数

常用参数:
--p 程序默认并行度
下面的参数仅可用于 -m yarn-cluster 模式
--yjm JobManager可用内存,单位兆
--ynm YARN程序的名称
--yq 查询YARN可用的资源
--yqu 指定YARN队列是哪一个
--ys 每个TM会有多少个Slot
--ytm 每个TM所在的Container可申请多少内存,单位兆
--yD 动态指定Flink参数
-yd 分离模式(后台运行,不指定-yd, 终端会卡在提交的页面上)

2.2 去yarn页面

在这里插入图片描述

2.3 停止 yarn-cluster

yarn application -kill application的ID

2.4 注意

在创建集群的时候,集群的配置参数就写好了,但是往往因为业务需要,要更改一些配置参数,这个时候可以不必因为一个实例的提交而修改conf/flink-conf.yaml;
可以通过:-yD Dynamic properties
来覆盖原有的配置信息:比如:
bin/flink run -m yarn-cluster -yD fs.overwrite-files=true examples/batch/WordCount.jar
-yD fs.overwrite-files=true -yD taskmanager.network.numberOfBuffers=16368

3. 第三种方式:Application Mode

application 模式使用 bin/flink run-application 提交作业;
通过 -t 指定部署环境,目前 application 模式支持部署在 yarn 上(-t yarn-application) 和 k8s 上(-t kubernetes-application);
并支持通过 -D 参数指定通用的 运行配置,比如 jobmanager/taskmanager 内存、checkpoint 时间间隔等。
通过 bin/flink run-application -h 可以看到 -D/-t 的详细说明:(-e 已经被废弃,可以忽略)

  • 下面列举几个使用 Application 模式提交作业到 yarn 上运行的命令:

3.1 第一种方式

  • 带有 JM 和 TM 内存设置的命令提交:
/bin/flink run-application -t yarn-application \
-Djobmanager.memory.process.size=1024m \
-Dtaskmanager.memory.process.size=1024m \
-Dyarn.application.name="MyFlinkWordCount" \
./examples/batch/WordCount.jar --output hdfs://node1:8020/wordcount/output_51

3.2 第二种方式

  • 在上面例子 的基础上自己设置 TaskManager slots 个数为3,以及指定并发数为3:
./bin/flink run-application -t yarn-application -p 3 \
-Djobmanager.memory.process.size=1024m \
-Dtaskmanager.memory.process.size=1024m \
-Dyarn.application.name="MyFlinkWordCount" \
-Dtaskmanager.numberOfTaskSlots=3 \
./examples/batch/WordCount.jar --output hdfs://node1:8020/wordcount/output_52

当然,指定并发还可以使用 -Dparallelism.default=3,而且社区目前倾向使用 -D+通用配置代替客户端命令参数(比如 -p)。所以这样写更符合规范:

./bin/flink run-application -t yarn-application \
-Dparallelism.default=3 \
-Djobmanager.memory.process.size=1024m \
-Dtaskmanager.memory.process.size=1024m \
-Dyarn.application.name="MyFlinkWordCount" \
-Dtaskmanager.numberOfTaskSlots=3 \
./examples/batch/WordCount.jar --output hdfs://node1:8020/wordcount/output_53

3.3 第三种方式

  • 和 yarn.provided.lib.dirs 参数一起使用,可以充分发挥 application 部署模式的优势:我们看 官方配置文档 对这个配置的解释:
yarn.provided.lib.dirs: A semicolon-separated list of provided lib directories. They should be pre-uploaded and world-readable. Flink will use them to exclude the local Flink jars(e.g. flink-dist, lib/, plugins/)uploading to accelerate the job submission process. Also YARN will cache them on the nodes so that they doesn't need to be downloaded every time for each application. An example could be hdfs://$namenode_address/path/of/flink/lib
意思是我们可以预先上传 flink 客户端依赖包 (flink-dist/lib/plugin) 到远端存储(一般是 hdfs,或者共享存储),然后通过 yarn.provided.lib.dirs 参数指定这个路径,flink 检测到这个配置时,就会从该地址拉取 flink 运行需要的依赖包,省去了依赖包上传的过程,yarn-cluster/per-job 模式也支持该配置。在之前的版本中,使用 yarn-cluster/per-job 模式,每个作业都会单独上传 flink 依赖包(一般会有 180MB左右)导致 hdfs 资源浪费,而且程序异常退出时,上传的 flink 依赖包往往得不到自动清理。通过指定 yarn.provided.lib.dirs,所有作业都会使用一份远端 flink 依赖包,并且每个 yarn nodemanager 都会缓存一份,提交速度也会大大提升,对于跨机房提交作业会有很大的优化。

使用示例如下:
my-application.jar 是用户 jar 包
上传 Flink 相关 plugins 到hdfs

cd /export/server/flink/plugins

hdfs dfs -mkdir -p /flink/plugins

hdfs dfs -put \
external-resource-gpu/flink-external-resource-gpu-1.14.0.jar \
metrics-datadog/flink-metrics-datadog-1.14.0.jar \
metrics-graphite/flink-metrics-graphite-1.14.0.jar \
metrics-influx/flink-metrics-influxdb-1.14.0.jar \
metrics-jmx/flink-metrics-jmx-1.14.0.jar \
metrics-prometheus/flink-metrics-prometheus-1.14.0.jar \
metrics-slf4j/flink-metrics-slf4j-1.14.0.jar \
metrics-statsd/flink-metrics-statsd-1.14.0.jar \
/flink/plugins

在这里插入图片描述
根据自己业务需求上传相关的 jar

cd /export/server/flink/lib
hdfs dfs -mkdir /flink/lib
hdfs dfs -put flink-csv-1.14.0.jar \
flink-dist_2.12-1.14.0.jar \
flink-json-1.14.0.jar \
flink-shaded-hadoop-3-uber-3.1.1.7.2.9.0-173-9.0.jar \
commons-cli-1.4.jar \
flink-shaded-zookeeper-3.4.14.jar \
flink-table_2.12-1.14.0.jar \
log4j-1.2-api-2.14.1.jar \
log4j-api-2.14.1.jar \
log4j-core-2.14.1.jar \
log4j-slf4j-impl-2.14.1.jar \
/flink/lib

在这里插入图片描述
上传用户 jar 到 hdfs

cd /export/server/flink
hdfs dfs -mkdir /flink/user-libs
hdfs dfs -put ./examples/batch/WordCount.jar /flink/user-libs
# 提交任务
bin/flink run-application -t yarn-application \
-Djobmanager.memory.process.size=1024m \
-Dtaskmanager.memory.process.size=1024m \
-Dtaskmanager.numberOfTaskSlots=2 \
-Dparallelism.default=2 \
-Dyarn.provided.lib.dirs="hdfs://node1:8020/flink/lib;hdfs://node1:8020/flink/plugins" \
-Dyarn.application.name="batchWordCount" \
hdfs://node1:8020/flink/user-libs/WordCount.jar --output hdfs://node1:8020/wordcount/output_54

在这里插入图片描述

4. 注意

如果使用的是flink on yarn方式,想切换回standalone模式的话,需要删除文件:【/tmp/.yarn-properties-root】
因为默认查找当前yarn集群中已有的yarn-session信息中的jobmanager

如果是分离模式运行的YARN JOB后,其运行完成会自动删除这个文件
但是会话模式的话,如果是kill掉任务,其不会执行自动删除这个文件的步骤,所以需要我们手动删除这个文件。

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
目录
相关文章
|
11月前
|
存储 分布式计算 流计算
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
本文介绍了阿里云开源大数据团队在实时计算领域的最新成果——向量化流计算引擎Flash。文章主要内容包括:Apache Flink 成为业界流计算标准、Flash 核心技术解读、性能测试数据以及在阿里巴巴集团的落地效果。Flash 是一款完全兼容 Apache Flink 的新一代流计算引擎,通过向量化技术和 C++ 实现,大幅提升了性能和成本效益。
3259 73
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
|
11月前
|
消息中间件 资源调度 关系型数据库
如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理
本文介绍了如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理。主要内容包括安装Debezium、配置Kafka Connect、创建Flink任务以及启动任务的具体步骤,为构建实时数据管道提供了详细指导。
517 9
|
12月前
|
资源调度 分布式计算 大数据
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
347 0
|
12月前
|
SQL 分布式计算 大数据
大数据-108 Flink 快速应用案例 重回Hello WordCount!方案1批数据 方案2流数据(一)
大数据-108 Flink 快速应用案例 重回Hello WordCount!方案1批数据 方案2流数据(一)
158 0
|
12月前
|
大数据 流计算
大数据-108 Flink 快速应用案例 重回Hello WordCount!方案1批数据 方案2流数据(二)
大数据-108 Flink 快速应用案例 重回Hello WordCount!方案1批数据 方案2流数据(二)
126 0
|
运维 Cloud Native 数据库
Flink 新一代流计算和容错问题之将 Flink 的容错与云原生的弹性扩缩容相结合要怎么操作
Flink 新一代流计算和容错问题之将 Flink 的容错与云原生的弹性扩缩容相结合要怎么操作
107 1
|
存储 流计算
Flink 新一代流计算和容错问题之Flink 通过 Key Group 管理状态是怎么操作的
Flink 新一代流计算和容错问题之Flink 通过 Key Group 管理状态是怎么操作的
167 1
|
存储 调度 流计算
Flink 新一代流计算和容错问题之如何实现 Generalized Log-Based Incremental Checkpoint
Flink 新一代流计算和容错问题之如何实现 Generalized Log-Based Incremental Checkpoint
116 1
|
存储 缓存 流计算
Flink 新一代流计算和容错问题之在有状态的算子中,状态更新是怎么记录的
Flink 新一代流计算和容错问题之在有状态的算子中,状态更新是怎么记录的
|
分布式计算 资源调度 Hadoop
在YARN集群上运行部署MapReduce分布式计算框架
主要介绍了如何在YARN集群上配置和运行MapReduce分布式计算框架,包括准备数据、运行MapReduce任务、查看任务日志,并启动HistoryServer服务以便于日志查看。
190 0