flink on yarn集群环境(生产环境使用)

flink on yarn集群环境(生产环境使用)

在一个企业中,为了最大化的利用集群资源,一般都会在一个集群中同时运行多种类型的 Workload。因此 Flink 也支持在 Yarn 上面运行;

flink on yarn的前提是:****hadoop、hdfs、yarn****均启动

配置要求

  • jdk1.8及以上【配置JAVA_HOME环境变量】

  • ssh免密码登录【集群内节点之间免密登录】

  • 至少****hadoop2.2****

  • hdfs & yarn

  • 服务器: node1(Master + Slave)

  • 服务器: node2(Slave)

  • 服务器: node3(Slave)

Flink客户端 所在的服务器上, 配置了 HADOOP_CONF_DIR 环境变量即可

flink on yarn集群环境(生产环境使用)_第1张图片

会话模式

Flink在YARN中, 开启一个集群环境, 也就是 在YARN中, 申请一批容器和资源, 然后持续的占用这些资源

在容器内运行JobManager和TaskManager

这个环境中的 JobManager持续存在YARN中, 不会主动停止

当有Flink程序提交的时候, 这个持续存在的JobManager会临时开启所需的TaskManager 供程序运行.

程序运行完成后, 解除开启的TaskManager, 保留当前JobManager继续等待新任务.

启动会话模式

bin/yarn-session.sh 可以启动会话模式

常用的参数:

Usage:
   Optional
     -at,--applicationType <arg>     Set a custom application type for the application on YARN
     -D <property=value>             use value for given property
     -d,--detached                   后台运行
     -h,--help                       Help for the Yarn session CLI.
     -id,--applicationId <arg>       Attach to running YARN session
     -j,--jar <arg>                  Path to Flink jar file
     -jm,--jobManagerMemory <arg>    JobManager内存
     -m,--jobmanager <arg>           Set to yarn-cluster to use YARN execution mode.
     -nl,--nodeLabel <arg>           Specify YARN node label for the YARN application
     -nm,--name <arg>                设置会话模式程序的名称
     -q,--query                      Display available YARN resources (memory, cores)
     -qu,--queue <arg>               Specify YARN queue.
     -s,--slots <arg>                每个TaskManager应该有几个Slot
     -t,--ship <arg>                 Ship files in the specified directory (t for transfer)
     -tm,--taskManagerMemory <arg>   每个TaskManager应该有多少内存可用
     -yd,--yarndetached              If present, runs the job in detached mode (deprecated; use non-YARN specific option instead)
     -z,--zookeeperNamespace <arg>   Namespace to create the Zookeeper sub-paths for high availability mode

示例:

bin/yarn-session.sh -s 1 -tm 1024

表示启动YARN会话模式, 每个TaskManager的Slot数量是1, 每个TaskManager可用1024M内存

注意: 上述参数中没有指定TaskManager的数量

在YARN集群中, TaskManager的数量是如何决定的呢?

因为在配置文件中, 设置了 默认并行度是3

既然是默认3个并行度, 需要3个subtask线程运行

每个Slot只能供给1个subtask 运行 , 由于有3个线程, 所以需要3个Slot

又因为, 我们提交的时候指定了 一个TaskManager只允许开启1个Slot

所以, 我们需要3个TaskManager 来提供3个Slot 供给3个线程(SubTask)去运行

注意: 在YARN中 不提供设定TaskManager的数量, TaskManager的数量是完全按照:

  1. 一个TaskManager可以开多少个Slot
  2. 并行度是多少(需要多少个Slot)

基于这两个来计算出来 需要多少个TaskManager, 那么就开启多少个.

所以在YARN模式中 我们只指定:

  1. 一个TaskManager可以开多少Slot
  2. 并行度是多少

基于这2个参数就能计算需要多少TaskManager

注意事项

flink on yarn集群环境(生产环境使用)_第2张图片

在启动过程中会出现错误,是由于flink缺少相关的依赖jar包 只需要将jar导入到flink文件所在的lib目录下重新启动即可

链接:https://pan.baidu.com/s/1RfcaXbFt-n0H3tB8SISfdg?pwd=elwh
提取码:elwh
flink on yarn集群环境(生产环境使用)_第3张图片

测试

运行flink自带的单词计数器

flink run ../examples/batch/WordCount.jar

flink on yarn集群环境(生产环境使用)_第4张图片

在yarn-session.sh提交后的任务页面中也可以观察到当前提交的任务:

flink on yarn集群环境(生产环境使用)_第5张图片

当前 进程id: application_1650291959210_0001

结束当前会话模式

yarn application -kill application_1650291959210_0001

flink on yarn集群环境(生产环境使用)_第6张图片

独立模式

当提交Flink任务到YARN中的时候, 去开启JobManager和TaskManager

程序运行完成后, JobManagerTaskManager都被回收

对比会话模式, 独立模式是一次性的

这就是标准的 在YARN中运行程序的流程.

启动独立模式

bin/flink run -m yarn-cluster

两种运行模式的场景

会话模式:

适用于有大批量的小任务 频繁的执行的场景

因为, 提交YARN程序 创建容器这些东西, 会消耗一定的时间

会话模式可以节省不少时间, 因为持续的作为YARN的程序存在, 提交程序反应更快.

不适用于 资源紧张的集群, 因为一直占着资源, 你不运行程序就是浪费.

独立模式:

适用于集群资源紧张, 需要运行的时候 才去占用资源, 并且运行完成后 会及时释放资源.

或者运行的程序的 体量比较大, 大任务 整体运行的时间还是很长的, 那么启动容器的那点时间

就不算什么了.

两种模式 都可以在生产场景下使用, 用哪个根据企业的需求即可.

如果要从YARN会话模式 切换回StandAlone模式, 需要删除/tmp/.yarn-properties-${提交YARN的用户名}

这是一个临时的指向文件, 正常的停止YARN 会话模式 这个文件会正常被删除

如果是非正常的停止了YARN会话模式, 这个文件会保留

这个文件在保留的时候, 会不断的将你的程序提交到YARN会话中, 导致你无法提交到原本想提交的StandAlone

如果是非正常停止会话模式, 请删除这个文件.

StandAlone 是要在每个服务器上 启动对应的角色进程, 比如master的进程和worker的进程.

所以 每一台服务器都需要安装或者解压 flink的安装包.

YARN模式, 是提交到YARN中去, 我们的程序是运行在容器内的, 所以我们只需要一台服务器作为客户端即可.

然后基于这一个Flink客户端, 就可以将内容全部同步到所有的容器内.

所以, 提交到YARN 只需要一台服务器有Flink即可 不需要全部都安装

包括前面学习的Spark也一样, 只要是跑在YARN上, 只需要一台客户端即可

注意

*如果使用的是flink on yarn方式,想切换回standalone模式的话,需要删除文件:【/tmp/.yarn-properties-root】*
*因为默认查找当前yarn集群中已有的yarn-session信息中的jobmanager*
*如果是分离模式运行的YARN* *JOB后,其运行完成会自动删除这个文件*
*但是会话模式的话,如果是kill掉任务,其不会执行自动删除这个文件的步骤,所以需要我们手动删除这个文件。*
*因为默认查找当前yarn集群中已有的yarn-session信息中的jobmanager*
*如果是分离模式运行的YARN* *JOB后,其运行完成会自动删除这个文件*
*但是会话模式的话,如果是kill掉任务,其不会执行自动删除这个文件的步骤,所以需要我们手动删除这个文件。*

你可能感兴趣的:(大数据开发,flink)