是一根破碎的管子吗?例外取消我的工作?

时间:2016-01-08 15:35:15

标签: apache-flink

目前,我正在使用144个TaskSlots在4台计算机的远程集群上运行Flink程序。运行约30分钟后,我收到以下错误:

  

INFO   org.apache.flink.runtime.jobmanager.web.JobManagerInfoServlet - 信息   jobmanager的服务器:无法为作业编写json更新   b2eaff8539c8c9b696826e69fb40ca14,因为   org.eclipse.jetty.io.RuntimeIOException:   org.eclipse.jetty.io.EofException at   org.eclipse.jetty.io.UncheckedPrintWriter.setError(UncheckedPrintWriter.java:107)     在   org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:280)     在   org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:295)     在   org.apache.flink.runtime.jobmanager.web.JobManagerInfoServlet.writeJsonUpdatesForJob(JobManagerInfoServlet.java:588)     在   org.apache.flink.runtime.jobmanager.web.JobManagerInfoServlet.doGet(JobManagerInfoServlet.java:209)     在javax.servlet.http.HttpServlet.service(HttpServlet.java:734)at   javax.servlet.http.HttpServlet.service(HttpServlet.java:847)at at   org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:532)     在   org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)     在   org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)     在   org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:965)     在   org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:388)     在   org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:187)     在   org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:901)     在   org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)     在   org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:47)     在   org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)     在org.eclipse.jetty.server.Server.handle(Server.java:352)at   org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:596)     在   org.eclipse.jetty.server.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:1048)     在org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:549)     在   org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:211)     在   org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:425)     在   org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:489)     在   org.eclipse.jetty.util.thread.QueuedThreadPool $ 2.run(QueuedThreadPool.java:436)     在java.lang.Thread.run(Thread.java:745)引起:   org.eclipse.jetty.io.EofException at   org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:905)     在   org.eclipse.jetty.http.AbstractGenerator.flush(AbstractGenerator.java:427)     在org.eclipse.jetty.server.HttpOutput.flush(HttpOutput.java:78)at   org.eclipse.jetty.server.HttpConnection $ Output.flush(HttpConnection.java:1139)     在org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:159)at   org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:86)at   java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:154)     在org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:258)at   org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:107)at at   org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:271)     ... 24更多引起:java.io.IOException:管道损坏了   sun.nio.ch.FileDispatcherImpl.write0(Native Method)at   sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)at   sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)at   sun.nio.ch.IOUtil.write(IOUtil.java:51)at   sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:470)at at   org.eclipse.jetty.io.nio.ChannelEndPoint.flush(ChannelEndPoint.java:185)     在   org.eclipse.jetty.io.nio.SelectChannelEndPoint.flush(SelectChannelEndPoint.java:256)     在   org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:849)     ......还有33个

我知道java.io.IOException: Broken pipe意味着JobManager失去了某种连接,所以我猜整个工作都失败了,我必须重新启动它。虽然我认为该进程不再运行,但WebInterface仍然将其列为正在运行。此外,当我使用jps来识别群集上正在运行的进程时,JobManager仍然存在。所以我的问题是,如果我的工作丢失了,这个错误是否有时是随机发生的,或者我的程序是否导致了它。

编辑:我的TaskManagers每隔几秒钟仍发送一次心跳,似乎正在运行。

1 个答案:

答案 0 :(得分:1)

这实际上是JobManagerInfoServlet,Flink的网络服务器的问题,由于java.io.IOException: Broken pipe at sun.nio.ch.FileDispatcherImpl.write0(Native Method),它无法将所请求作业的最新JSON更新发送到您的浏览器。因此,只有对服务器的GET请求失败。

此类故障不应影响当前运行的Flink作业的执行。只需刷新浏览器(使用Flink的Web UI),就应该发送另一个GET请求,然后希望成功完成。