作业提交在Apache Flink中花费了大量时间

时间:2018-01-31 16:31:59

标签: apache-flink

我有一个使用Apache Flink编写的应用程序。它实现了基于信息论的特征选择方法。对于方法 mRMR ,我有两个DataSet<> s - 一个,比如 A ,包含所选要素,另一个包含 B ,包含所有其他功能。当我选择一项功能时,我会从 B 中删除该功能,并将其添加到 A 。因此,我首先计算类和功能之间的互信息,然后选择具有最大互信息的功能,并将其添加到 A 。然后我有一个cross()函数来计算 A B 中所有要素之间的互信息。通过这样做,我可以调整 B 中所有功能的互信息,并为 A 选择新功能。我这样做了很多次,直到我选择想要的功能数量。我使用以下命令提交作业:

~/Programs/flink-1.4.0/bin/flink run -c org.apache.flink.feast.Main target/flink-feast-1.0.jar --method mrmr --top 5 --input ~/Datasets/00388/data_copy.txt --label 0

--top 5参数用于传递我希望程序选择的功能数量。在我的测试数据集中,我有1024个功能。

现在,当我想选择5个功能时,效果很好。当我尝试选择15个功能时,作业提交需要10分钟,当我尝试选择20个功能时,需要花费更多时间。这种行为是否正常?如果不是,我该怎么办?我怀疑cross()函数,它是提交需要很长时间,而不是执行。我试图增加作业和任务管理器的堆大小,但问题仍然存在。

谢谢。

1 个答案:

答案 0 :(得分:0)

我不知道您的cross()函数是什么,但在Flink运行作业之前,它看起来像是使用top的值将运算符添加到Flink Operators Graph中。

根据我的经验,如果提交作业需要很长时间,那是因为操作员图表太复杂,所以Flink需要更多时间来探索可以应用的所有可行优化

例: 这需要更少的时间发送

source -> map -> keyBy -> windows -> reduce -> sink

比以下的复杂工作

               /->filter->flatMap-> keyBy -> windows -> reduce-\
              /-->filter->flatMap-> keyBy -> windows -> reduce--\
source -> map --->filter->flatMap-> keyBy -> windows -> reduce---> join -> sink
              \-->filter->flatMap-> keyBy -> windows -> reduce--/
               \->filter->flatMap-> keyBy -> windows -> reduce-/