上面我们说了flink允许子任务共享slot,等等,有几个任务,如何分配slot等等对吧.
然后我们再继续来看slot和并行度的关系,看到上面左侧,这个任务有A任务4个并行度,然后B任务4个并行度,然后C任务2个并行度,D任务4个并行度,然后E任务2个并行度...也就是对应的子任务的个数对吧.可以看到这个任务,如果分配的话.
分配到2个taskmanager,然后有4个slot就够了对吧,可以看到因为他这里最多的子任务就是4个,
然后可以看到上面的,任务的分配,实际上很简单,就是最多的子任务,需要每个slot都有一个,然后
子任务不够的话,找其中的slot去分配上就可以了.所以一般slot的个数一般都是以最多的子任务的
个数来算.
然后我们再看,同样是输入,A任务是输入,C任务也是输入,我们把A和C放到同一个slot中也没问题对吧,因为在同一个slot中,任务不是并行的对吧.
然后我们再看如果我们有3个taskmanager,然后9个slot
然后如果我们有个WordCount的并行度是1的话,并且这个并行度是配置在配置文件中的
flink-conf.yaml 中配置的Default value =1
如果是并行度是1 的话,那么可以看到就占用了一个slot对吧.
然后我们再看如果并行度是2,这个2可以在flink-conf.yaml中配置parallelism.default:2
也可以在执行任务的时候,在命令行参数中指定 ./flink -p 2 启动flink的时候指定对吧.
然后还有就是在代码中可以指定:
env.setParallelism(2)
然后我们再看如果我们设置了parallelism=9 并行度是9的话,可以看到,
每个slot中就都有3个任务了,分别是,source flatMap reduce sink对吧
然后这里其实是有问题的,因为如果我们到时候,sink操作,不是输出到控制台,而是
输出到csv文件中的话,那么如果有9个sink同时对这个Csv进行写入的话,那么这个文件
肯定会乱.
所以写入的时候,一定要只有一个slot,执行sink任务才行,所以这个时候需要给
counts.writeAsCsv(outputPath,"\n"," ").setParallelism(1);
可以看到写Csv的操作这里应该设置成1对吧,也就是允许同时一个slot来进行写
csv的操作.
,