S3連接重置錯誤

Apache Spark作業失敗,S3連接重置錯誤。

寫的arjun.kaimaparambilrajan

最後發布日期:2022年3月15日

問題

嚐試S3操作時,Apache Spark作業失敗。

堆棧跟蹤中出現錯誤信息“Caused by: java.net.SocketException: Connection reset”。

S3讀取操作的堆棧跟蹤示例:

導致:javax.net.ssl.SSLException:連接複位;請求ID: XXXXX,擴展請求ID: XXXXX,雲提供商:AWS,實例ID: i-XXXXXXXX at sun.security.ssl.Alert.createSSLException(Alert.java:127) at sun.security.ssl.TransportContext.fatal(TransportContext.java:324)…at sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:833) at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)…at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:135) at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:90) at com.amazonaws.event.ProgressInputStream.read(ProgressInputStream.java:180) at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:90)…導致:java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:210) at java.net.SocketInputStream.read(SocketInputStream.java:141) at sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:467) at sun.security.ssl.SSLSocketInputRecord.readFully(SSLSocketInputRecord.java:450) at sun.security.ssl.SSLSocketInputRecord.decodeInputRecord(SSLSocketInputRecord.java:243)

導致

舊版本的Hadoop S3連接器不會重試SocketTimeoutExceptionSSLException錯誤。這些異常分別在客戶端超時或服務器端超時時發生。

解決方案

此問題已在新版本的Hadoop S3連接器中得到解決。Databricks Runtime 7.3 LTS及以上版本使用新的連接器。

  • 如果您使用Databricks Runtime 7.3 LTS或以上版本,請確保這些設置不存在於集群的Spark配置中:
    spark.hadoop.fs.s3。impl com.databricks.s3a.S3AFileSystemspark.hadoop.fs.s3n.impl com.databricks.s3a.S3AFileSystem spark.hadoop.fs.s3a.impl com.databricks.s3a.S3AFileSystem
  • 如果您使用的是Databricks Runtime 7.0 - 7.2,請升級到Databricks Runtime 7.3 LTS或以上版本。
  • 如果您使用的是Databricks Runtime 6.4或以下版本,請聯係技術支持以獲得幫助。