簡體   English   中英

Flink DataSet程序運行多個作業

[英]Flink DataSet program runs several jobs

我在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() 廣播變量將DataSet分發給運算符的每個並行實例。 計算和分發在同一程序中進行,不通過客戶端程序進行路由。 而是在運行運營商的工作人員之間直接交換數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM