Flink DataSet程序运行多个作业



我在Apache Flink中有以下代码。当我执行它时,我的代码的某些部分会运行两次。有人能告诉我为什么会发生这种事吗?

DataSet input1 = ...
DataSet input2 = ...
List mappedInput1 = input1
    .map(...)
    .collect();
DataSet data = input1
    .union(input1.filter(...))
    .mapPartition(...);
data = data.union(data2).distinct();
data.flatMap(new MapFunc1(data.collect()));
data
    .flatMap(new MapFunc2(input2.collect()))
    .groupBy(0)
    .sum(1)
    .print();

每个collect()print()语句都急切地触发执行并将结果获取到客户端代码。每次这样的调用都会将整个程序回溯到数据源。

您的代码包含三个collect()和一个print()语句。因此,提交并执行了四个单独的程序。您应该了解广播变量,而不是使用collect()。广播变量将数据集分发到运算符的每个并行实例。计算和分发发生在同一个程序中,而不是通过客户端程序进行路由。相反,数据在运行操作员的工人之间直接交换。

相关内容

  • 没有找到相关文章

最新更新