案例: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)
OutOfMemoryError
和 overhead 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 支援方案提供。