You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by Ever <43...@qq.com> on 2019/09/28 01:30:33 UTC

task-manager中taskslot的classloader隔离问题

有一个job有2个task,每个task分别有3个subtask(并行度为3), 如下图所示。



每个subtask会占用一个taskslot, 但是同一个job的不同task的subtask可以共享同一个taskslot, 所以这里应该是一个taskslot会有2个subtask。
那么这两个share同一个taskslot的subtask, 其classloader是同一个, 还是说每个subtask都有不同的classloader呢?


因为我的job中会用到一个静态类(Scala的Object或者java中的单例类), 类里面有个包含基础数据的集合成员变量。我想知道这个变量是需要在每个subtask中初始化, 还是只需要在jvm范围内初始化一次。

Re: task-manager中taskslot的classloader隔离问题

Posted by Biao Liu <mm...@gmail.com>.
同一个 TM 中,相同 job 的 subtask 会共享一个 classloader

Thanks,
Biao /'bɪ.aʊ/



On Sat, 28 Sep 2019 at 09:30, Ever <43...@qq.com> wrote:

> 有一个job有2个task,每个task分别有3个subtask(并行度为3), 如下图所示。
>
> 每个subtask会占用一个taskslot, 但是同一个job的不同task的subtask可以共享同一个taskslot,
> 所以这里应该是一个taskslot会有2个subtask。
> 那么这两个share同一个taskslot的subtask, 其classloader是同一个,
> 还是说每个subtask都有不同的classloader呢?
>
> 因为我的job中会用到一个静态类(Scala的Object或者java中的单例类),
> 类里面有个包含基础数据的集合成员变量。我想知道这个变量是需要在每个subtask中初始化, 还是只需要在jvm范围内初始化一次。
>
>