当前位置:   article > 正文

Broadcast Variables广播变量

广播变量
Flink  Broadcast Variables:
Broadcast variables允许你创建一个数据集在所有的并行操作节点都能获取到,除了常规的输入操作。针对一些小的依赖数据集,这种方式是非常有用的,这个data set数据集将会作为一个Collection集合被操作访问。
Broadcast(广播数据) :通过withBroadcastSet(DataSet, String) 进行广播数据,并给这份数据起名字
Access(获取数据):通过getRuntimeContext().getBroadcastVariable(String)获取广播出去的数据
确保在广播的时候,和获取数据的时候使用相同的broadcastSetName名称。
// 1. 准备等待广播的DataSet数据
DataSet<Integer> toBroadcast = env.fromElements(1, 2, 3);
DataSet<String> data = env.fromElements("a", "b");
data.map(new RichMapFunction<String, String>() {
    @Override
    public void open(Configuration parameters) throws Exception {
      // 3. 获取广播的DataSet数据 作为一个Collection
      Collection<Integer> broadcastSet = getRuntimeContext().getBroadcastVariable("broadcastSetName");
    }
    @Override
    public String map(String value) throws Exception {
        ...
    }
}).withBroadcastSet(toBroadcast, "broadcastSetName"); // 2. 广播DataSet
注意:
1:广播出去的变量存在于每个节点的内存中,所以这个数据集不能太大。因为广播出去的数据,会常驻内存,除非程序执行结束。
2:广播变量在初始化广播出去以后不支持修改,这样才能保证每个节点的数据都是一致的。
个人建议:如果数据集在几十兆或者百兆的时候,可以选择进行广播,如果数据集的大小上G的话,就不建议进行广播了。
示例:
package com.imooc.flink.java.course04;
import org.apache.flink.api.common.functions.RichMapFunction;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.configuration.Configuration;
import java.util.ArrayList;
import java.util.List;
/**
* Created by IBM-2018 on 2019/9/10.
*/
public class JavaDataSetBroadcastApp {
    public static void main(String[] args) throws Exception {
        ExecutionEnvironment enviro
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/696214
推荐阅读
相关标签
  

闽ICP备14008679号