大数据预处理学习心得(大数据Flink数据处理)(1)

大数据预处理学习心得(大数据Flink数据处理)(2)

上面我们说了flink允许子任务共享slot,等等,有几个任务,如何分配slot等等对吧.

大数据预处理学习心得(大数据Flink数据处理)(3)

大数据预处理学习心得(大数据Flink数据处理)(4)

然后我们再继续来看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中,任务不是并行的对吧.

大数据预处理学习心得(大数据Flink数据处理)(5)

大数据预处理学习心得(大数据Flink数据处理)(6)

然后我们再看如果我们有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)

大数据预处理学习心得(大数据Flink数据处理)(7)

大数据预处理学习心得(大数据Flink数据处理)(8)

然后我们再看如果我们设置了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的操作.

,