Flink:执行管道java.util.concurrent.TimeoutException时出错:期货在[10000毫秒]后超时

时间:2018-04-17 10:35:41

标签: java batch-processing apache-flink

我正在使用Flink v1.4.0

我正在利用Flink的原生图谱API(Gelly),我用它来处理1200万个数据点(边缘)。我目前正在使用IntelliJ minicluster通过Flink运行我的作业,minicluster在同一个JVM中执行所有TaskManagers和JobManager。

当我加载数据,有效地生成边缘时,就在我的Flink作业运行之前,我总是会遇到以下异常:

...
Connected to JobManager at Actor[akka://flink/user/jobmanager_1#XXXXXXXXXX] with leader session id XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.
322062 [main] ERROR com.somecompany.some.domain.name.some.javaClass- Error executing pipeline
java.util.concurrent.TimeoutException: Futures timed out after [10000 milliseconds]
            at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:223)
            at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:157)
            at scala.concurrent.Await$$anonfun$ready$1.apply(package.scala:169)
            at scala.concurrent.Await$$anonfun$ready$1.apply(package.scala:169)
            at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53)

...

我确保通过IntelliJ编辑运行配置以添加:

-Dakka.client.timeout:600s
-Dakka.ask.timeout:600s

但是异常仍然存在,而且我没有其他任何线索可以解释它是什么造成的。当我减小数据大小时,一切正常。

当我尝试通过Flink UI提交相同的作业以在我已安装在群集上的本地版Flink上运行时,会出现同样的问题。在这种情况下,作业永远不会启动,我甚至无法预览自动生成的运算符DAG。当我减少要处理的数据量时,问题再次消失。我还更新了flink-conf.yaml以包含相同的akka配置属性,但这没有任何区别。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在IntelliJ中运行Flink作业时,依赖于Flink迷你群集。迷你集群不同于在独立,Yarn或Mesos上运行Flink,因为它依赖于单个JVM。此外,迷你集群以多种方式预先配置,并且不总是可以改变该配置(至少对于某些设置)。

将作业提交到集群时(不是通过迷你集群运行它时)我必须更改的一件事是我分配给作业管理器的堆内存的大小。这是必要的,因为加载要处理的数据不是我想要运行的Flink作业的一部分(这在Flink中不是标准做法,做这样的事情实际上是错误的)。通过增加Job-Manager的堆,我能够运行我的作业,但最终我必须为我的Flink Job定义一个新的输入格式,以便保存Job-Manager不必预先加载数据以执行 - 无论如何,它不应该是它的责任。

对于手头的问题:通过IntelliJ无法完成对作业管理器的堆内存分配(据我所知),因此作业总是会失败。