Share via


案例: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)

OutOfMemoryErroroverhead limit exceeded 錯誤也可能出現在 sparkthriftdriver.log 中,如下列範例所示:

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 支援方案提供。