你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

方案: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 中还可能出现 OutOfMemoryErroroverhead 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 社区支持获取 Azure 专家的解答。

  • 联系 @AzureSupport,这是用于改进客户体验的官方 Microsoft Azure 帐户。 它可以将 Azure 社区成员连接到适当的资源,为他们提供解答、支持和专家建议。

  • 如果需要更多帮助,可以从 Azure 门户提交支持请求。 从菜单栏中选择“支持” ,或打开“帮助 + 支持” 中心。 有关更多详细信息,请参阅如何创建 Azure 支持请求。 Microsoft Azure 订阅中带有对订阅管理和计费支持的访问权限,技术支持通过 Azure 支持计划之一提供。