目前,我正在使用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每隔几秒钟仍发送一次心跳,似乎正在运行。
答案 0 :(得分:1)
这实际上是JobManagerInfoServlet
,Flink的网络服务器的问题,由于java.io.IOException: Broken pipe at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
,它无法将所请求作业的最新JSON更新发送到您的浏览器。因此,只有对服务器的GET请求失败。
此类故障不应影响当前运行的Flink作业的执行。只需刷新浏览器(使用Flink的Web UI),就应该发送另一个GET请求,然后希望成功完成。