我已经运行spark structured streaming
一段时间了,但是现在看到以下异常:
ChannelOutputShutdownException: Channel output shutdown
这是在
之后发生的val flights2a = (spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("subscribe", "airjpart3")
.option("startingOffsets", "earliest")
.option("max.poll.records", "20000")
.load())
,然后进行几次查询以重组数据。这是更多的堆栈跟踪:
[0719-22:47:31.061] INFO: select * from airsyFilt
19/07/19 22:48:04 ERROR TransportClient: Failed to send RPC RPC 7871969257559858384 to mellyrn/192.168.0.3:51492: io.netty.channel.socket.ChannelOutputShutdownException: Channel output shutdown
io.netty.channel.socket.ChannelOutputShutdownException: Channel output shutdown
at io.netty.channel.AbstractChannel$AbstractUnsafe.shutdownOutput(AbstractChannel.java:587)
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:893)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:313)
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:847)
at io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1266)
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:770)
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:762)
at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:743)
at io.netty.channel.ChannelOutboundHandlerAdapter.flush(ChannelOutboundHandlerAdapter.java:115)
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:770)
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:762)
at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:743)
at io.netty.channel.ChannelDuplexHandler.flush(ChannelDuplexHandler.java:117)
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:770)
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:762)
at io.netty.channel.AbstractChannelHandlerContext.access$1500(AbstractChannelHandlerContext.java:35)
at io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask.write(AbstractChannelHandlerContext.java:1116)
at io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.run(AbstractChannelHandlerContext.java:1050)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:399)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:464)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:131)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodError: org.apache.spark.network.util.AbstractFileRegion.transferred()J
at org.apache.spark.network.util.AbstractFileRegion.transfered(AbstractFileRegion.java:28)
at io.netty.channel.nio.AbstractNioByteChannel.doWrite(AbstractNioByteChannel.java:232)
at io.netty.channel.socket.nio.NioSocketChannel.doWrite(NioSocketChannel.java:282)
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:879)
... 21 more
19/07/19 22:48:04 ERROR OneForOneBlockFetcher: Failed while starting block fetches
java.io.IOException: Failed to send RPC RPC 7871969257559858384 to mellyrn/192.168.0.3:51492: io.netty.channel.socket.ChannelOutputShutdownException: Channel output shutdown
at org.apache.spark.network.client.TransportClient$RpcChannelListener.handleFailure(TransportClient.java:357)
有人见过/有见识吗?
Update1 首先,这个问题似乎是由于对Workers的内存资源施加了过多压力。 WriteStream
如下:
def writes(sdf: Dataset[_], table: String, interval: String = "20 seconds", outputMode: String = "complete") = {
val outDf = (sdf.writeStream
.outputMode(outputMode)
.format("memory")
.queryName(table)
.trigger(Trigger.ProcessingTime(interval))
.start())
正在写入的表中有太多数据无法充分存储。错误消息实际上并没有明确指出问题所在。
基于另一个答案,我提供了数据大小是元凶的证据。为避免出现此问题,对sql进行了更新,添加了limit N
,如下所示:
select * from airsyFilt limit 100000
出于诊断目的,我正在运行原始sql:生产应用仅需要聚合,因此我有能力进行此更改。
Update2 即使数据量较小到中等,也会发生上述错误。在过去的五年多的时间里,我从未见过。 spark邮件列表中最近提到了这一点,因此我目前正在尝试降级到spark 2.3.3(从2.4.2开始)。将在这里更新。
降级到Spark 2.3.3无效。所以这仍然是一个悬而未决的问题。
Update3 此代码在另一台计算机上工作正常。 Spark 本身唯一的自定义设置是将log4j.properties
设置为更加小气/简约。我在都是机器上做了相同的更改。
Macos Mojave是一台计算机(仅在24小时后无法运行)。另一个是Centos。通常,Spark在跨平台上的表现很好,但在这里不确定。
答案 0 :(得分:0)
好吧,我发现只要在依赖列表中有不兼容的jar,就会发生NoSuchMethodError。 我强烈感到您用来运行应用程序的一些jar彼此不兼容。请查看版本。