大数据开发

Flink实时流计算入门系列——广播变量使用

2020-05-17  本文已影响0人  晨冉1688

​总是被项目经理问:为什么你的Flink代码占用我这么多的集群资源啊?集群受不了,优化一下吧,程序员一听到优化的痛疼症,你懂的……

image

今天我们就讲解一个比较基础,且容易被人忽略的基础优化Flink程序的方法。Flink和Spark一样,都有支持广播变量这定义。广播变量,可以理解成为日常的广播,是一个公共的变量。 广播变量创建后,它可以运行在集群中的任何function上,而不需要多次传递给集群节点,可以直接在内存中拿数据,避免了大量的shuffle,导致集群性能下降。我们可以把一个dataset 或者不变的缓存对象(例如map list集合对象等)数据集广播出去,然后不同的任务在节点上都能够获取到,并在每个节点上只会存在一份,而不是在每个并发线程中存在。如果不使用broadcast,则在每个节点中的每个任务中都需要拷贝一份dataset数据集,比较浪费内存(也就是一个节点中可能会存在多份dataset数据)。广播变量,可以借助下图辅助理解。

image

光说不用,假把式,广播变量实际如果使用呢,我们通过一个例子来体验吧,创建广播变量,我们使用withBroadcastSet来创建,而使用getRuntimeContext.getBroadcastVariable,实际操作中,我们一般把比较小的一个数据集设置为广播变量。使用步骤,构建两个测试数据集,使用RichMapFuntion对成绩数据进行map转换,在数据集调用map方法后,会调用withBroadcastSet将学生数据集创建广播变量,广播出去。核心代码如下:

def main(args: Array[String]): Unit = {

实际工作中,需要注意广播出去的变量是存在每个节点的内存中的,知道程序结束,所以需要防止这个数据集过大,上面代码运行可以得到下面的结果

image

如果觉得还不错的话,就尽情的转发分享吧。关注更多内容,欢迎关注公众号:一点IT技术,进入公众号联系我们,更可以参与到共同读者的讨论中哦!

你的转发和分享是对作者最大的肯定和动力
往期精彩
Flink实时流计算入门系列(一)
Excel职场中必须会的高级查询函数……
这个浏览器插件神器,带你玩转各网站资源,高手都在用……

上一篇下一篇

猜你喜欢

热点阅读