Scala spark流式查询上的ChannelOutputShutdownException

Scala spark流式查询上的ChannelOutputShutdownException,scala,apache-spark,spark-structured-streaming,Scala,Apache Spark,Spark Structured Streaming,我已经运行了一段时间spark structured streaming,但现在发现以下异常: ChannelOutputShutdownException: Channel output shutdown 这是在之后发生的 val flights2a = (spark.readStream .format("kafka") .option("kafka.bootstrap.servers", "localhost:9092") .option("subscribe", "airj

我已经运行了一段时间
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())
然后进行几个查询以重新构造数据。以下是stacktrace的更多信息:

[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起初,这个问题似乎是由于工作人员的内存资源压力过大造成的。
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())
select * from airsyFilt limit 100000 
正在写入的表的数据太多,无法充分存储。错误消息并没有真正说明这是问题所在

根据另一个答案,我提供了数据量是罪魁祸首的证据。避免该问题的sql更新是添加
限制N
,如下所示:

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())
select * from airsyFilt limit 100000 
我运行原始sql是为了进行诊断:生产应用程序只需要聚合,因此我可以进行此更改

更新2即使数据大小较小或中等,也会出现上述错误。在我五年多的时间里,我从未见过火花。最近spark邮件列表中提到了这一点,因此我目前正在尝试将spark 2.3.3(从2.4.2)降级。将在此处更新

降级到spark 2.3.3没有效果。所以这仍然是一个悬而未决的问题

更新3此代码在另一台机器上运行良好。Spark自身的唯一定制是将
log4j.properties
设置为更加吝啬/节俭。我在两台机器上做了同样的改变


Macos Mojave是一台机器(24小时后才开始工作)。另一个是Centos。通常Spark在跨平台方面做得很好,但在这里不确定。

我发现,只要依赖项列表中有不兼容的JAR,就不会发生任何方法错误。
我强烈感觉到,您运行应用程序时使用的一些JAR彼此不兼容。请看一下这些版本。

我发现,只要依赖项列表中有不兼容的JAR,就不会发生任何方法错误。
我强烈感觉到,您运行应用程序时使用的一些JAR彼此不兼容。请看一下版本。

NoSuchMethodError
通常出现在您说的时候-在这种情况下,只需在
sql
中添加一个
limit N
,即可解决此问题。所以很明显,这不是一个库版本控制问题。我正在用
limit100000
sql更新我的答案,这样可以避免问题。而
NoSuchMethodError
通常发生在你说的时候-在这种情况下,只需在
sql
中添加一个
limitn
就可以解决问题。所以很明显,这不是一个库版本控制问题。我正在用
limit100000
sql更新我的答案,这样可以避免这个问题。