Flink 分布式缓存 广播变量 区别

区别:

1.广播变量是基于内存的,是将变量分发到各个worker节点的内存上(避免多次复制,节省内存)

2.分布式缓存是基于磁盘的,将文件copy到各个节点上,当函数运行时可以在本地文件系统检索该文件(避免多次复制,提高执行效率)

 

分布式缓存:

Flink提供了一个分布式缓存,类似于hadoop,可以使用户在并行函数中很方便的读取本地文件,并把它放在taskmanager节点中,防止task重复拉取。
此缓存的工作机制如下:程序注册一个文件或者目录(本地或者远程文件系统,例如hdfs或者s3),通过ExecutionEnvironment注册缓存文件并为它起一个名称。
当程序执行,Flink自动将文件或者目录复制到所有taskmanager节点的本地文件系统,仅会执行一次。用户可以通过这个指定的名称查找文件或者目录,然后从taskmanager节点的本地文件系统访问它。

Flink 分布式缓存 实例

 

Broadcast 广播变量:

一句话解释,可以理解为是一个公共的共享变量,我们可以把一个dataset 数据集广播出去,然后不同的任务在节点上都能够获取到,这个数据在每个节点上只会存在一份。如果不使用broadcast,则在每个节点中的每个任务中都需要拷贝一份dataset数据集,比较浪费内存(也就是一个节点中可能会存在多份dataset数据)。

注意:

1:广播出去的变量存在于每个节点的内存中,所以这个数据集不能太大,避免发生OOM。因为广播出去的数据,会常驻内存,除非程序执行结束。

2:广播变量在初始化广播出去以后不支持修改,这样才能保证每个节点的数据都是一致的。

个人建议:如果数据集在几十兆或者百兆的时候,可以选择进行广播,如果数据集的大小上G的话,就不建议进行广播了。
在这里插入图片描述

Flink 广播变量 实例

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章