Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flink 理解Flink(批处理)中操作员之间的数据传输_Apache Flink_Flink Batch - Fatal编程技术网

Apache flink 理解Flink(批处理)中操作员之间的数据传输

Apache flink 理解Flink(批处理)中操作员之间的数据传输,apache-flink,flink-batch,Apache Flink,Flink Batch,我还在苦苦思索flink是如何在不同的操作符之间“交换/转换”数据的,以及操作符之间的实际数据会发生什么 以上面的DAG为例: 数据集被转发/传输到GroupReduce运算符的所有并行实例,数据将根据GroupReduce转换进行缩减 新数据的所有被转发到过滤器->映射->映射操作数,即GroupReduce运算符的一个并行实例所消耗的所有数据被传输到过滤器->映射->映射运算符的一个实例(不需要序列化/反序列化,因此操作员可以访问GroupReduce运算符生成的数据) GroupRe

我还在苦苦思索flink是如何在不同的操作符之间“交换/转换”数据的,以及操作符之间的实际数据会发生什么

以上面的DAG为例:

  • 数据集被转发/传输到GroupReduce运算符的所有并行实例,数据将根据GroupReduce转换进行缩减

  • 新数据的所有被转发到过滤器->映射->映射操作数,即GroupReduce运算符的一个并行实例所消耗的所有数据被传输到过滤器->映射->映射运算符的一个实例(不需要序列化/反序列化,因此操作员可以访问GroupReduce运算符生成的数据)

  • GroupReduces的所有输出数据在(筛选器->映射)运算符的所有并行实例之间进行散列和均匀分布/传输(运算符之间需要序列化/反序列化)

  • 因此,例如,如果GroupReduce运算符的输出大约为100MB,它会将100MB转发到(Filter->Map->Map)操作数,并对该100MB的副本进行哈希运算,然后将其传输到(Filter->Map)实例。因此,我将生成另外100MB的网络流量

    我很困惑为什么GroupReduce之后和筛选步骤之前会有这么多网络流量。在将现在减少的数据发送给后续运营商之前,将GroupRedcue和筛选步骤链接在一起不是更好吗?

    该功能与使用MapReduce编程模型中的组合器相同

    部分计算可以显著提高算法的性能 GroupReduceFunction。这种技术也称为应用 实现GroupCombineFunction接口以启用 部分计算,即此GroupReduceFunction的组合器


    因此,在组合器之后,总是有一个洗牌阶段/分区将所有上游运算符连接到所有下游运算符。请检查以澄清什么是组合器。

    Flink不能为您链接
    GroupReduce
    Filter
    运算符,因为在
    GroupReduce
    之后有两个不同的筛选器t、 第二个过滤器位于散列分区之后,我假设您使用的是一些
    keyBy
    操作符。这与Spark中的洗牌阶段相同,上游操作符的所有实例都将数据发送给下游操作符的所有实例。洗牌阶段有大量流量。keyBy操作符位于(过滤器->映射)之后运算符,所以我想知道当大量数据被过滤时,为什么flink会在(过滤映射)之前而不是之后对数据集进行散列