報錯原因及解決方案
說明
您可以在應用列表頁簽中,搜尋應用ID,單擊日誌,查看目標Spark作業的日誌資訊。具體操作,請參見Spark開發編輯器。
Both '$jdbcTableName' and '$jdbcQueryString' can not be specified at the same time
報錯出現日誌:Driver日誌。
報錯原因:通過Spark訪問JDBC資料來源時,OPTIONS
配置項中的url
和dbtable
參數重複指定了資料表。
解決方案:資料表僅需指定一次,請刪除url
參數中指定的表名。
SQLException .* No suitable driver found for
報錯出現日誌:Driver日誌。
報錯原因:通過Spark訪問JDBC資料來源時,沒有找到合適的驅動。
解決方案:檢查作業配置的JAR包,需確保JAR包中有合適的JDBC驅動程式。同時訪問多種JDBC資料來源時,JAR包中需有所有資料來源相關的JDBC驅動程式。例如:同時訪問Hive和RDS MySQL資料來源,JAR包中應包含Hive資料來源和RDS MySQL資料來源的JDBC驅動。
CommunicationsException .* Communications link failure
報錯出現日誌:Driver日誌。
報錯原因:Spark作業中配置的彈性網卡無法訪問指定的資料來源。常見於訪問RDS MySQL資料來源和HDFS資料來源的情境。
解決方案:
檢查當前Spark作業中指定交換器的IP位址區段是否在資料來源的白名單配置中。若不在,則需配置資料來源的白名單。
例如:訪問RDS資料來源時,若指定交換器的IP位址區段不在RDS的白名單中,則需將指定的交換器IP位址區段添加到RDS的白名單。
檢查當前Spark作業中指定的安全性群組是否開放了目標資料來源的連接埠存取權限。具體操作,請參見添加安全性群組規則。
例如:訪問RDS MySQL資料來源時,應在安全性群組規則的入方向與出方向開放3306連接埠。
檢查當前Spark作業中掛載的彈性網卡是否和目標資料來源在同一個VPC中。
SSL peer shut down incorrectly
報錯出現日誌:Driver日誌。
報錯原因:通過Spark訪問JDBC資料來源時沒有配置正確的SSL認證。
解決方案:請參考通過SSL鏈路訪問RDS MySQL資料文檔中的配置樣本,配置正確的SSL認證資訊。
Can't get JDBC type for <資料類型>
報錯出現日誌:Driver日誌。
報錯原因:Spark訪問JDBC資料來源時資料類型轉換錯誤。例如:訪問RDS MySQL資料時,資料來源中的資料類型為允許為空白的SHORT INT
, 映射到AnalyticDB for MySQL表中的類型是INT
。
解決方案:修改AnalyticDB for MySQL中表的資料類型,確保JDBC資料來源中允許為空白的資料列類型也可以被正確的映射到AnalyticDB for MySQL。 例如:RDS MySQL的資料類型為SHORT INT
,映射到AnalyticDB for MySQL表為BOOLEAN
。
Exit Code: 137
報錯出現日誌:Driver日誌。
報錯原因:Executor進程使用的記憶體超出限制。Spark Executor除了JVM本身使用的記憶體外,還包括堆外記憶體(Shuffle、Cache),以及Python UDF等使用的記憶體。容器使用的記憶體超過了容器允許使用記憶體的限制,導致Spark進程被kill命令強制終止。常見於資料採礦情境或者以Python語言為核心的Spark作業中。
解決方案:調大spark.executor.memoryOverhead參數,該參數表示容器內部非Spark Executor進程可使用的記憶體容量(單位MB),預設為Executor容器總記憶體容量的百分之三十。例如您當前配置的Executor規格是Medium(2核8 GB),則容器內部非Spark Executor進程可使用的記憶體容量預設為是2.4 GB。調整語句如下:
spark.executor.memoryOverhead: 4000MB
No space left on device
報錯出現日誌:Executor日誌。
報錯原因:磁碟空間不足。
解決方案:通過spark.adb.executorDiskSize
參數掛載的額外磁碟。具體操作,請參見Spark應用配置參數說明。
The VPC of the specified ENI and security group are not in the same VPC
報錯出現日誌:Driver日誌。
報錯原因:Spark作業配置的交換器和安全性群組不在同一VPC內。
解決方案:檢查Spark作業中的配置,並重新設定正確的交換器和安全性群組。
java.lang.ClassNotFoundException
報錯出現日誌:Driver日誌。
報錯原因:提交Spark作業時,上傳的JAR包缺少類,常見於使用第三方JAR包的情境。
解決方案:檢查第三方JAR包是否完整,若不完整,需要重新打包,並確保JAR包中含目標類。
Cannot broadcast the table that is larger than
報錯出現日誌:Driver日誌。
報錯原因:廣播表的大小超過了配置的限制,導致廣播失敗。廣播表的詳情,請參見Broadcast。
解決方案:
Spark作業中廣播表的最大記憶體為8 GB,您可以在提交Spark作業時使用spark.sql.autoBroadcastJoinThreshold
參數配置廣播表的記憶體。單位MB。
Spark會使用抽樣方法估算表的大小,如果表分布不均勻,估算就會出現錯誤。您可以將spark.sql.autoBroadcastJoinThreshold
參數的取值配置為-1
,關閉廣播特性,從而保障業務可以順利執行。單位MB。
Not enough memory to build and broadcast the table to all
報錯出現日誌:Driver日誌。
報錯原因:廣播表超過了Driver節點的最大記憶體。廣播表的詳情,請參見Broadcast。
解決方案:您需調小spark.sql.autoBroadcastJoinThreshold
參數的取值,建議不超過400。單位MB。
unkown host .* ts.adb.com
報錯出現日誌:Driver日誌。
報錯原因:由於網路波動,DNS伺服器串連失敗等原因導致內部服務網域名稱解析失敗。
解決方案:若該報錯發生頻率較高,可以配置spark.adb.eni.adbHostAlias.enabled=true
解決。
The security group has been managed by another cloud product.
報錯出現日誌:GetSparkAppLog返回日誌。
報錯原因:Spark作業中指定的安全性群組為另外一個雲端服務管理的安全性群組,不允許在AnalyticDB for MySQL Spark中使用。
解決方案:檢查Spark作業中安全性群組的配置,並重新設定正確的安全性群組。
does not have enough IP addresses
報錯出現日誌:GetSparkAppLog返回日誌。
報錯原因:Spark作業中指定的交換器配額已滿,無法申請更多的IP地址。
解決方案:檢查Spark作業中交換器的配置,並重新設定交換器,確保其有足夠的空閑IP。
exceeded quota
報錯出現日誌:GetSparkAppLog介面返回日誌。
報錯原因:Spark作業執行所需資源超過了Job型資源群組剩餘的可用資源。
解決方案:修改資源群組的計算最大預留資源,或等待其他作業執行完成後再提交Spark作業。
Error fetching partition paths with prefix
報錯出現日誌:Driver日誌。
報錯原因:通過Spark訪問Hudi資料時,所指定的Hudi表分區不存在。
解決方案:檢查Hudi表分區是否存在。
The bucket you access does not belong to you
報錯出現日誌:Driver日誌。
報錯原因:spark.adb.roleArn
參數指定的角色沒有訪問OSS的許可權。
解決方案:您需為RAM使用者授予對應許可權。具體操作,請參見同帳號授權。
EsHadoopNoNodesLeftException: Connection error .* all nodes failed
報錯出現日誌:Driver日誌。
報錯原因:檢索分析服務Elasticsearch版不允許Spark直連DataNode訪問資料,導致開源社區的預設配置無法訪問資料。
解決方案:請參考訪問Elasticsearch資料來源文檔中的配置樣本,訪問Elasticsearch資料。
MetaException .* User have none of the privileges
報錯出現日誌:Driver日誌。
報錯原因:執行Spark作業的使用者沒有訪問中繼資料的許可權。
解決方案:您需要為執行Spark作業的資料庫帳號綁定RAM使用者並根據讀寫需求授予對應的庫表許可權。具體操作,請參見綁定或解除綁定RAM使用者與資料庫帳號和授權資料庫帳號。