flink流计算

Flink 广播变量

2021-07-09  本文已影响0人  架构师老狼

简介

用法

1:初始化数据
  DataSet<Integer> num = env.fromElements(1, 2, 3)
  2:广播数据
  .withBroadcastSet(toBroadcast, "num");
  3:获取数据
  Collection<Integer> broadcastSet = getRuntimeContext().getBroadcastVariable("num");
  
  注意:
  1:广播出去的变量存在于每个节点的内存中,所以这个数据集不能太大。因为广播出去的数据,会常驻内存,除非程序执行结束
  2:广播变量在初始化广播出去以后不支持修改,这样才能保证每个节点的数据都是一致的
class BroadcastMap extends RichMapFunction<String, String> {
    private List list = new ArrayList();

    @Override
    public void open(Configuration parameters) throws Exception {
        // 3. 获取广播的DataSet数据 作为一个Collection
        Collection<Integer> broadcastSet = getRuntimeContext().getBroadcastVariable("number");
        list.addAll(broadcastSet);
    }

    @Override
    public String map(String value) throws Exception {
        return value + ": " + list;
    }
}


public class BroadCastTest {
    public static void main(String[] args) throws Exception {
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

        //1.封装一个DataSet
        DataSet<Integer> broadcast = env.fromElements(1, 2, 3);
        DataSet<String> data = env.fromElements("a", "b");

        data.map(new BroadcastMap()).withBroadcastSet(broadcast, "number")
         // 2. 广播的broadcast
        .printToErr();//打印到err方便查看
    }
}

雷区

上一篇 下一篇

猜你喜欢

热点阅读