请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于task slot,DOP,分区,线程的疑问

老师好~学到这里对这几个概念有一点疑问,想问一下老师:

1- 是否task slot数=DOP=分区数=线程数呢?

2- 我在程序里设置了DOP数(比如20)超过了本机的core的数量(这里12),为什么没有报错反而还能按照20个的前缀打印出结果呢?

3- 我们UI界面的工作流这里,这个job被分为了4个阶段(每个阶段的并行度不一样),这里可以理解为,4个阶段是在taskManager上串行的,然后第1个阶段并行度是1,那就只有一个slot在用,其他的空置这样,等这个阶段完成之后再进入下一个阶段吗?

图片描述

谢谢老师啦~

正在回答 回答被采纳积分+3

1回答

Michael_PK 2022-07-17 20:21:19

DOP的全称是?

flink里面有几个场景会进行阶段的拆分: 并行度发生了变化,遇到了shuffle的算子,比如keyBy之类的


你这图上第一个箭头 并行度发生了变化    第二个箭头hash了,里面有类似shuffle算子,第三个图是并行度发生了变化

0 回复 有任何疑惑可以回复我~
  • 提问者 慕少7351152 #1
    我看网上DOP是并行度的简写,degree of parallel。。。
    所以说第2个问题setParallelism方法设定的并行度20超出了core的数量12,print方法的打印结果前缀是从1-20都有的,这里是说这个TaskManager的JVM进程里面产生了20个线程工作,但是实际的core只有12个会根据OS调度这样吗?
    以及第一个问题 是不是这样的: 
    task slot数=MIN(Core Number, DOP), DOP=分区数=线程数
    回复 有任何疑惑可以回复我~ 2022-07-17 22:02:57
  • Michael_PK 回复 提问者 慕少7351152 #2
    你这个DOP概念我不是太清楚,网上说的是啥意思。
    
    关于task和subtask的问题,我给你梳理下:
    
    Flink 将多个 subTask 合并成一个 Task(任务),这个过程叫做 Operator Chains,每个任务由一个线程执行。使用 Operator Chains(算子链) 可以将多个分开的 subTask 拼接成一个任务,每个执行chain会在TaskManager上的一个独立线程来执行,这样不仅可以减少线程的数量及线程切换带来的资源消耗,还能降低数据在算子之间传输序列化和反序列化带来的消耗。Operator Chains 是一个有用的优化,它减少了线程到线程的切换和缓冲的开销,并在降低延迟的同时提高了总体吞吐量。
    
    你的图上一个框其实是一个task,框里面的数字是subtask
    回复 有任何疑惑可以回复我~ 2022-07-18 00:47:55
  • 提问者 慕少7351152 回复 Michael_PK #3
    DOP是指的并行度,degree of parallel的各首字母简写嘛。
    老师我还有两点疑问啊,
    1- 这个图里面的这种串行的框是说要等上一个框的所有算子链都执行完之后再执行下一个框吗?
    2- 同一个框的算子链对应的独立线程是在这个框执行一开始就全部创建好吗?(是不是设置的并行度就等于内部的线程池的容量)
    
    麻烦老师啦~
    回复 有任何疑惑可以回复我~ 2022-07-20 11:12:59
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信