方案:Azure HDInsight 中的 Apache Spark thrift 服务器发生 RpcTimeoutException
本文介绍在 Azure HDInsight 群集中使用 Apache Spark 组件时出现的问题的故障排除步骤和可能的解决方案。
问题
Spark 应用程序失败并出现 org.apache.spark.rpc.RpcTimeoutException
异常和以下示例中所示的消息:Futures timed out
:
org.apache.spark.rpc.RpcTimeoutException: Futures timed out after [120 seconds]. This timeout is controlled by spark.rpc.askTimeout
at org.apache.spark.rpc.RpcTimeout.org$apache$spark$rpc$RpcTimeout$$createRpcTimeoutException(RpcTimeout.scala:48)
sparkthriftdriver.log
中还可能出现 OutOfMemoryError
和 overhead limit exceeded
错误,如以下示例中所示:
WARN [rpc-server-3-4] server.TransportChannelHandler: Exception in connection from /10.0.0.17:53218
java.lang.OutOfMemoryError: GC overhead limit exceeded
原因
这些错误的原因是数据处理期间内存资源不足。 如果启动 Java 垃圾回收进程,可能会导致 Spark 应用程序停止响应。 查询将开始超时并停止处理。 Futures timed out
错误表示群集遭受严重的压力。
解决方法
通过添加更多的工作器节点或增加现有群集节点的内存容量,来增大群集大小。 还可以调整数据管道,以减少一次性处理的数据量。
spark.network.timeout
将控制所有网络连接的超时。 增大网络超时可为某些关键操作提供更多的时间,但不能彻底解决该问题。
后续步骤
如果你的问题未在本文中列出,或者无法解决问题,请访问以下渠道之一获取更多支持:
- 如果需要更多帮助,可以从 Azure 门户提交支持请求。 从菜单栏中选择“支持” ,或打开“帮助 + 支持” 中心。