Flink部署——Standalone模式

3.1 Standalone模式

  1. Flink 中每一个 TaskManager 都是一个JVM进程,它可能会在独立的线程上执行一个或多个 subtask

  2. 为了控制一个 TaskManager 能接收多少个 task, TaskManager 通过 task slot 来进行控制(一个 TaskManager 至少有一个 slot)

  3. 每个task slot表示TaskManager拥有资源的一个固定大小的子集。假如一个TaskManager有三个slot,那么它会将其管理的内存分成三份给各个slot(注:这里不会涉及CPU的隔离,slot仅仅用来隔离task的受管理内存)

  4. 可以通过调整task slot的数量去自定义subtask之间的隔离方式。如一个TaskManager一个slot时,那么每个task group运行在独立的JVM中。而当一个TaskManager多个slot时,多个subtask可以共同享有一个JVM,而在同一个JVM进程中的task将共享TCP连接和心跳消息,也可能共享数据集和数据结构,从而减少每个task的负载

在这里插入图片描述

在这里插入图片描述

  1. 默认情况下,Flink 允许子任务共享 slot,即使它们是不同任务的子任务(前提是它们来自同一个job)。 这样的结果是,一个 slot 可以保存作业的整个管道。

  2. Task Slot 是静态的概念,是指 TaskManager 具有的并发执行能力,可以通过参数taskmanager.numberOfTaskSlots进行配置;而并行度parallelism是动态概念,即TaskManager运行程序时实际使用的并发能力,可以通过参数parallelism.default进行配置。 举例:如果总共有3个TaskManager,每一个TaskManager中分配了3个TaskSlot,也就是每个TaskManager可以接收3个task,这样我们总共可以接收9个TaskSot。但是如果我们设置parallelism.default=1,那么当程序运行时9个TaskSlot将只有1个运行,8个都会处于空闲状态,所以要学会合理设置并行度!

  • conf/flink-conf.yaml配置文件中

  • taskmanager.numberOfTaskSlots

  • parallelism.default

# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.
​
taskmanager.numberOfTaskSlots: 1
​
# The parallelism used for programs that did not specify and other parallelism.
​
parallelism.default: 1

注:Flink存储State用的是堆外内存,所以web UI里JVM Heap SizeFlink Managed MEM是两个分开的值。

3.1.1 Web UI提交job

Flink Savepoint简单介绍

启动Flink后,可以在Web UI的Submit New Job提交jar包,然后指定Job参数。

  • Entry Class

    程序的入口,指定入口类(类的全限制名)

  • Program Arguments

    程序启动参数,例如--host localhost --port 7777

  • Parallelism

    设置Job并行度。

    Ps:并行度优先级(从上到下优先级递减)

    • 代码中算子setParallelism()

    • ExecutionEnvironment env.setMaxParallelism()

    • 设置的Job并行度

    • 集群conf配置文件中的parallelism.default

    ps:socket等特殊的IO操作,本身不能并行处理,并行度只能是1

  • Savepoint Path

    savepoint是通过checkpoint机制为streaming job创建的一致性快照,比如数据源offset,状态等。

    (savepoint可以理解为手动备份,而checkpoint为自动备份)

ps:提交job要注意分配的slot总数是否足够使用,如果slot总数不够,那么job执行失败。(资源不够调度)

这里提交前面demo项目的StreamWordCount,在本地socket即nc -lp 7777中输入字符串,查看结果

输入:

hello world, and thank you!

输出:

可以看出来输出的顺序并不是和输入的字符串严格相同的,因为是多个线程并行处理的。

1> (world,,1)
2> (and,1)
1> (thank,1)
2> (you!,1)
2> (hello,1)

3.1.2 命令行提交job

  1. 查看已提交的所有job

    $ bin/flink list      
    Waiting for response...
    ------------------ Running/Restarting Jobs -------------------
    30.01.2021 17:09:45 : 30d9dda946a170484d55e41358973942 : Flink Streaming Job (RUNNING)
    --------------------------------------------------------------
    No scheduled jobs.
  2. 提交job

    • -c指定入口类

    • -p指定job的并行度

    bin/flink run -c <入口类> -p <并行度> <jar包路径> <启动参数>

    $ bin/flink run -c wc.StreamWordCount -p 3 /tmp/Flink_Tutorial-1.0-SNAPSHOT.jar --host localhost --port 7777
    Job has been submitted with JobID 33a5d1f00688a362837830f0b85fd75e
  3. 取消job

    bin/flink cancel <Job的ID>

    $ bin/flink cancel 30d9dda946a170484d55e41358973942
    Cancelling job 30d9dda946a170484d55e41358973942.
    Cancelled job 30d9dda946a170484d55e41358973942.

注:Total Task Slots只要不小于Job中Parallelism最大值即可。

eg:这里我配置文件设置taskmanager.numberOfTaskSlots: 4,实际Job运行时总Tasks显示9,但是里面具体4个任务步骤分别需求(1,3,3,2)数量的Tasks,4>3,满足最大的Parallelism即可运行成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值