Flink on yarn 提交流程 资源管理

Flink on Yarn 有两种执行方式一种是Session-Cluster模式,另一种是Pre-Job-Cluster模式


Flink Session (Session-Cluster)

  1. 内存集中管理模式:在Yarn中初始化一个Flink集群,开辟指定的资源,之后我们提交的Flink Jon都在这个Flink yarn-session中,也就是说不管提交多少个job,这些job都会共用开始时在yarn中申请的资源。这个Flink集群会常驻在Yarn集群中,除非手动停止。
  2. 在yarn上启动一个守护进程,用于启动多个job,即启动一个application master 用来管理多个job
  3. 此种模式分为两步:yarn-session.sh(开辟资源)+flink run(提交任务)
  4. ./yarn-session.sh -n 4 -jm 1024 -tm 5120 -s 5 -nm yarn-session-jobs -d

参数说明:

  • -n : 指定number of task manager,指定taskmanager个数
  • -jm: jobmanager所占用的内存数,单位为MB
  • -tm: 指定每个taskmanager所占用的内存,单位为MB
  • -s: 指定每个taskmanager可使用的cpu核数
  • -nm: 指定Application的名称
  • -d : 后台启动,session启动后,进程关闭

启动流程说明:

  1. 启动session 后,yarn首先会分配一个Container,用于启动APP master和jobmanager, 所占用内存为-jm指定的内存大小,cpu为1核
  2. 没有启动job之前,jobmanager是不会启动taskmanager的(jobmanager会根据job的并行度,即所占用的slots,来动态的分配taskmanager)
  3. 提交任务到APP master
  4. ./flink run -p 3 -yid application_id -d -c com.xxx ~/jar/xxx-1.0-SNAPSHOT.jar用于启动一个job到指定的APP master中

注:job参数要写在-c之前,不然指定参数不起作用

参数说明:

  • -p:指定任务的并行度,如果你在程序代码中指定了并行度的话,那么此处的并行度参数不起作用
  • -yid:指定任务提交到哪一个application—id,默认是提交到本节点最新提交的一个application
  • -c: job的主入口 + jar path

Flink run (Per-Job-Cluster)

启动一个单独的job提交到yarn集群上,即单job单session,实现资源的完全隔离。
启动job的命令跟yarn-session 中有差异 ,通过指定 -m yarn-cluster,参数较session都带有-y

./flink run \
-m yarn-cluster \
-yn 2 \
-yjm 1024  \
-ytm 3076 \ 
-p 2 \
-ys 3 \
-yD name=hadoop \
-ynm RTC_KB_FLINK_TEST \
-yqu rt_constant \
-c com.kb.rt.Test02 ~/jar/kb-1.0-SNAPSHOT.jar   

参数说明:

  • -m :yarn-cluster,代表启动单session提交单一job
  • -yn:taskmanager个数
  • -yjm:jobmanager的内存占用
  • -ytm:每个taskmanager的内存占用
  • -ys: 每个taskmanager可使用的CPU核数
  • -ynm:application 名称
  • -yqu:指定job的队列名称
  • -c: 程序主入口+ jar path
  • -p: 指定任务的并行度
  • -yD: 动态参数设置

任务提交流程

在这里插入图片描述

  1. flink-client将任务提交到yarn,会将所有依赖的jar和config等均上传到hdfs中
  2. 向resourceManager申请资源,Resourcemanager中主要包含两部分:ApplicationManager和resourceScheduler
  3. ApplicationManager启动ApplicationMaster,ResourceScheduler分配运行ApplicationMaster所需要的Container。
  4. 在ApplicationMaster上启动Flink的JobManager,并采用轮询的方式通过RPC向ResourceManager申请资源
  5. ResourceManager接收到请求后,会分配相应的Container,用于将来启动TaskManager,并从hdfs上下载相应的jar和config。
  6. ApplicationMater 要求相应的Container启动任务。
  7. 相应的JobManager和TaskManager启动完成。

Flink 资源管理

operator chains

在整个dataflow处理过程中,存在很多operator,也可以理解成算子,相邻的operator之间存在一定的关联关系,将相邻的operator连接在一起形成chain是flink高效进行分布式计算的关键,它能够减少线程间的切换及消息的序列化和反序列化。

在这里插入图片描述

ono-to-one streams : source 和 map之间,并没有发生分区的变化以及分区间数据交换。
redistributing streams :map和keyby/window之间 以及 keyby/window和sink之间,出现了分区间数据交换或者分区数变化。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


slot

  1. slots 一般是指对于taskmanager的固定资源子集,或者说是线程。如果一个taskmanager中有3个slot,那么每个slot管理1/3的内存托管。

  2. 内存资源由于slots的存在不会出现内存竞争的情况,而slots对内存进行了隔离,但是注意的是并没有隔离cpu

Slots和parallelism是有区别的,Slot是一个静态的概念,是说taskmanager能够具有的并行执行的能力,而parallelism只有在程序执行时才有意义,是一个动态的概念,是指程序运行时实际使用的并发能力,但是两者又有关系。parallelism不能大于slots数。

共享Slot : SlotSharingGroup 和 CoLocationGroup

默认情况下,Flink 允许subtasks共享slot,条件是它们都来自同一个Job的,且拥有相同SlotSharingGroup(默认的名称是 default) 的不同task的subtask。 那么也就意味着名称不同的task的subtask之间共享到一个slot中,这样就会使得一个slot有机会持有一个完成的pipeline。因此在默认的slotsharing情况下,job启动所需要的slot数量和job中operator的最大的parallelism相等。

在这里插入图片描述
上图中是一个source - map - reduce 的模型job,如图中左下角显示,其中,source 和 map的 parallelism 是 4 ,reduce的 parallelism 是 3 。每个圆表示一个subtask; 而整个job中operator的最大的parallelism 是 4;如果将该任务提交执行,则可以知道job所需要的slot是 4个 ;如果将job提交到2个taskManager,每个taskmanager有3个slot,如图中右侧所示,其中有3个slot中存在有完整的 source-map-reduce 模型的pipeline。但是其中没有画出来数据进行shuffle的过程。

在这里插入图片描述
上图包含 source - map , keyBy/window/apply , sink 的模型job,其中 source-map的parallelism是6 ,keyBy/window/apply的parallelism是6 , sink的parallelism是1,那么该job提交所需要的slot为6个,分配后,左侧第一个slot中拥有完整的pipeline,运行3个subtask,其余5个slot分别运行这2个subtask,最终数据再传输给sink进行输出。


Flink run 参数

参数说明
Action "run" compiles and runs a program.
Syntax: run [OPTIONS] <jar-file> <arguments>

"run" action options:
 -c,--class <classname>                         Class with the program entry
                                                point ("main" method or
                                                "getPlan()" method. Only
                                                needed if the JAR file does
                                                not specify the class in its
                                                manifest.
 -C,--classpath <url>                           Adds a URL to each user code
                                                classloader  on all nodes in
                                                the cluster. The paths must
                                                specify a protocol (e.g.
                                                file://) and be accessible
                                                on all nodes (e.g. by means
                                                of a NFS share). You can use
                                                this option multiple times
                                                for specifying more than one
                                                URL. The protocol must be
                                                supported by the {
    
    @link
                                                java.net.URLClassLoader}.
 -d,--detached                                  If present, runs the job in
                                                detached mode
 -m,--jobmanager <host:port>                    Address of the JobManager
                                                (master) to which to
                                                connect. Use this flag to
                                                connect to a different
                                                JobManager than the one
                                                specified in the
                                                configuration.
 -p,--parallelism <parallelism>                 The parallelism with which
                                                to run the program. Optional
                                                flag to override the default
                                                value specified in the
                                                configuration.
 -q,--sysoutLogging                             If present, suppress logging
                                                output to standard out.
 -s,--fromSavepoint <savepointPath>             Path to a savepoint to reset
                                                the job back to (for example
                                                file:///flink/savepoint-1537
                                                ).
 -z,--zookeeperNamespace <zookeeperNamespace>   Namespace to create the
                                                Zookeeper sub-paths for high
                                                availability mode
Options for yarn-cluster mode:
 -yD <arg>                            Dynamic properties
 -yd,--yarndetached                   Start detached
 -yid,--yarnapplicationId <arg>       Attach to running YARN session
 -yj,--yarnjar <arg>                  Path to Flink jar file
 -yjm,--yarnjobManagerMemory <arg>    Memory for JobManager Container [in
                                      MB]
 -yn,--yarncontainer <arg>            Number of YARN container to allocate
                                      (=Number of Task Managers)
 -ynm,--yarnname <arg>                Set a custom name for the application
                                      on YARN
 -yq,--yarnquery                      Display available YARN resources
                                      (memory, cores)
 -yqu,--yarnqueue <arg>               Specify YARN queue.
 -ys,--yarnslots <arg>                Number of slots per TaskManager
 -yst,--yarnstreaming                 Start Flink in streaming mode
 -yt,--yarnship <arg>                 Ship files in the specified directory
                                      (t for transfer)
 -ytm,--yarntaskManagerMemory <arg>   Memory per TaskManager Container [in
                                      MB]
 -yz,--yarnzookeeperNamespace <arg>   Namespace to create the Zookeeper
                                      sub-paths for high availability mode

-n 10 一共启动10个TaskManager节点

-jm 1024 JobManager的内存大小为1024M
 
-tm 2048 TaskManager的内存大小为2048M
-d 使用detached模式进行部署(部署完成后本地命令行可以退出)
-qu default 部署到YARN的default队列中

猜你喜欢

转载自blog.csdn.net/qq_43081842/article/details/112153724