Flink 学习笔记九

2017/07/01 Flink

Flink2 学习笔记九

Broadcast variables

允许一些特定的数据集在所有的operators上都可以访问。通常来说,广播变量用来处理和一些操作中要经常访问的数据。我们只需要声明数据是广播数据,给定一个名称,这份数据自动的分布到各个executor中。 Java Sample:

DataSet<Integer> toBroadcast=env.fromElement(1,2,3);
DataSet<String> data=env.fromElement("India","USA","UK").map(new RichMapFunction<String,Strimng>(){
    private List<Integer> toBroadcast;

    @Override
    public void open(Configuration par) throws Exception{
        this.toBroadcast=getRuntimeContext().getBroadcastVariable("country");
    }

    @Override
    public String map(String input) throws Exception{
        int sum=0;
        for(int a:toBroadcast){
            sum=a+sum;
        }
        return input.toUpperCase()+sum;
    }
    
}).withBroadcastSet(toBroadcast,"country");

data.print();

Data Sinks

支持的Data Sinks 有:

  • writeAsText()
  • writeAsCsV()
  • print()/printErr()
  • write()
  • output()

Connectors

Flink可以读取HDFS,Amazon S3,Alluxio,Avro,Mircosoft Azure 等类型的数据源。

Iterations

Flink通过定义步进函数,支持运行时迭代处理(runtime iterative data processing)。

Iterator operator

迭代操作器如下图所示: 图一

  1. Iteration Input:初始化数据或者是上一个迭代的输出数据
  2. Step Function:用来处理输入数据的函数
  3. Next Partial Solution:输出数据中需要参于到下一次计算的部分
  4. Iteration Result:所有迭代运算完成后总的结果

迭代的次数是可以人为控制的。

Delta iterator

增量迭代运算也是支持的,和常规迭代的差别主要在增量迭代是主要用来更新解集而不是在每次的迭代中完全重新计算。这使得增量迭代更加高效。如下图: 图二

  1. 输入:需要同时输入工作数据和结果数据
  2. 步进函数:会在输入数据上运行的函数
  3. Next Work set/Update Solution:更新最新的结果集
  4. 输出:所有的迭代完成后的数据 增量迭代的性能会更好。

(Batch Processing)数据批处理API已经的介绍已经完成。

Show Disqus Comments

Search

    Table of Contents