这是广播变量的学习:
Java代码的实现:
package batch;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.common.functions.RichMapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.api.java.operators.MapOperator;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.configuration.Configuration;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class BatchDemoBroadCast {
/**
* broadcast 广播变量
* 需求:
* flink会从数据源中获取到用户的姓名
* 最终需要把用户的姓名和年龄信息打印出
*
* 分析
* 所以需要在中间的map处理的时候获取用户的年龄的信息
* 建议吧 用户的关系数据集使用广播变量进行处理
*
*
*注意:如果多个算子需要使用同一份使用的一份数据集,那么需要在对应的多个算子后面分别注册广播变量
*广播出去的变量存在每个节点内存中,所以这个数据集不能太大,因为广播出去的数据,会存在内存,除非程序执行结束
* 广播变量在初始化广播出去以后不支持修改,这样才能保证每个节点的数据都是一致的!
*
*
* @param args
*/
public static void main(String[] args) throws Exception{
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
ArrayList<Tuple2<String,Integer>> datalist=new ArrayList<>();
datalist.add