日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Spark

更新時間:

本文匯總了使用AnalyticDB for MySQL Spark的常見問題及解決方案。

常見問題概覽

如何查看Spark應用信息?

如何解決提交Spark應用時,出現User %s do not have right permission [ *** ] to resource [ *** ]報錯?

如何解決運行Spark應用時,出現No space left on device或設備上沒有空間報錯?

如何解決提交Spark應用時,出現Current Query Elastic Resource Failed報錯?

如何解決Spark應用日志中出現的ClassNotFound報錯?

如何解決Spark應用日志中出現的NoSuchMethod報錯?

如何解決Spark SQL應用讀JSON外表(包含日志投遞自建)時,出現ClassNotFoundException: org.apache.hadoop.hive.serde2.JsonSerDe報錯?

如何解決Spark SQL應用讀內表時,出現No such file or directory報錯?

運行Spark應用時,為什么Spark Executor節點會出現Dead?

Spark訪問外部數據源時,為什么會出現網絡連接失敗問題?

Spark SQL應用使用SHOW TABLES或SHOW DATABASE命令查詢庫表時,為什么顯示的庫表與實際庫表不符?

Spark應用為什么提示錯誤日志oss object 403?

如何定位Spark應用運行速度變慢的原因?

如何定期刪除Spark應用日志信息?

如何解決創建UDF時,Spark應用卡住的問題?

如何查看Spark應用信息?

您可在Spark Jar開發頁面,搜索應用ID,查看Spark應用信息。具體操作,請參見Spark開發編輯器

如何解決提交Spark應用時,出現User %s do not have right permission [ *** ] to resource [ *** ]報錯?

原因:當前RAM用戶沒有調用該接口的權限。

解決方法:按以下步驟為RAM用戶添加對應的權限。

  1. 登錄RAM控制臺,為該RAM用戶授予報錯信息中對應的Resource權限。

  2. 為RAM用戶授予AliyunADBFullAccess、AliyunADBSparkProcessingDataRole和AnalyticDB for MySQL庫表的讀寫權限。具體操作,請參見賬號授權

如何解決運行Spark應用時,出現No space left on device或設備上沒有空間報錯?

原因:可能由于Executor本地磁盤不足,導致以上報錯。

解決方法:在Spark Jar開發頁面的應用列表頁簽中,單擊對應Spark應用操作列的UI,查看Spark UI中Executor的Stderr日志信息。如果Executor本地磁盤不足,可通過配置spark.adb.executorDiskSize參數,增加Spark Executor節點中掛載的額外磁盤容量。具體操作,請參見Spark應用配置參數說明

重要
  • 當前Executor本地磁盤最大為100Gi。如果本地磁盤已經為100Gi,仍然提示空間不足,可以增加Executor的數量。

如何解決提交Spark應用時,出現Current Query Elastic Resource Failed報錯?

原因:通過JDBC方式提交XIHE BSP應用所使用的數據庫賬號綁定了Job型資源組,資源拉起速度慢,導致應用超時。

解決方法:解除Job型資源組綁定的數據庫賬號。具體操作,請參見綁定或解綁數據庫賬號

如何解決Spark應用日志中出現的ClassNotFound報錯?

原因:提交Spark應用時,上傳的JAR包缺少類。

解決方法:您可以打開上傳的JAR包,檢查該類是否存在。

  • 如果是業務相關的類,您需要重新打包,并確保JAR包中含目標類。

  • 如果是第三方JAR包,您可以采用如下兩種方式上傳:

    • 使用Maven依賴的Shade或Assembly插件,需手動添加所需的依賴包。

    • 將第三方JAR包上傳至OSS中,并在提交Spark應用時配置jars參數。詳細信息請參見Spark應用開發介紹

如何解決Spark應用日志中出現的NoSuchMethod報錯?

原因:導入的JAR包與Spark沖突,導致以上報錯。

解決方法:您可以通過Spark的conf配置參數添加以下配置,在日志中打印類加載過程中涉及的JAR包,從而排查哪些JAR包與Spark沖突。然后通過Maven常見的沖突解決方式Provided和Relocation解決該報錯。詳情請參見Conf配置參數

"spark.executor.extraJavaOptions":"-verbose:class",
"spark.driver.extraJavaOptions":"-verbose:class"

如何解決Spark SQL應用讀JSON外表(包含日志投遞自建)時,出現ClassNotFoundException: org.apache.hadoop.hive.serde2.JsonSerDe報錯?

您需下載hive-serde-3.1.2.jarhive-hcatalog-core-2.3.9.jar并上傳至OSS中,在提交Spark SQL應用時添加add jar oss://<testBucketName>/hive-hcatalog-core-2.3.9.jar;add jar oss://<testBucketName>/hive-serde-3.1.2.jar;語句。

說明

<testBucketName>需替換為hive-serde-3.1.2.jar和hive-hcatalog-core-2.3.9.jar所在的實際OSS路徑。

如何解決Spark SQL應用讀內表時,出現No such file or directory報錯?

原因:內表熱數據默認存儲在Worker節點上,而Spark離線讀取數據時,會從OSS中讀取,此時OSS中沒有內表熱數據,會導致Spark SQL執行失敗。

解決方法:在查詢內表熱數據前,使用XIHE引擎執行以下SQL修改配置參數,然后手動BUILD表。BUILD完成后再查詢該表的熱數據。具體操作,請參見BUILD

SET ADB_CONFIG CSTORE_HOT_TABLE_ALLOW_SINGLE_REPLICA_BUILD=true;
SET ADB_CONFIG ELASTIC_ENABLE_HOT_PARTITION_HAS_HDD_REPLICA=true;
SET ADB_CONFIG ELASTIC_PRODUCT_ENABLE_MIXED_STORAGE_POLICY=true;

運行Spark應用時,為什么Spark Executor節點會出現Dead?

Spark Jar開發頁面,單擊目標Spark應用操作列的UI跳轉到對應的Spark UI頁面,如果應用失敗原因為Failed to connect to /xx.xx.xx.xx:xxxx,或者在Spark UI頁面的Executors頁簽下出現狀態為Dead的Executor節點,則說明Spark Executor節點由于某種原因退出了。進入Spark UI的具體方法,請參見Spark開發編輯器

原因和解決方法如下:

  • 原因1:

    Executor進程使用的內存超出限制。Spark Executor除了JVM本身使用的內存外,還包括堆外內存(Shuffle、Cache),以及Python UDF等使用的內存。容器使用的內存超過了容器允許使用內存的限制,導致Spark進程被kill命令強制終止。此時Driver日志出現如下報錯:ERROR TaskSchedulerImpl: Lost executor xx on xx.xx.xx.xx:The executor with id xx exited with exit code 137.

    解決方法:

    調大spark.executor.memoryOverhead參數,該參數表示容器內部非Spark Executor進程可使用的內存容量(單位MB),默認為Executor容器總內存容量的百分之三十。例如您當前配置的Executor規格是Medium(2核8 GB),則容器內部非Spark Executor進程可使用的內存容量默認為是2.4 GB。調整語句如下:

    spark.executor.memoryOverhead: 4000MB
  • 原因2:

    日志中出現java.lang.OutOfMemoryError的日志。您可在Spark Jar開發頁面,單擊目標Spark應用操作列的UI跳轉到對應的Spark UI頁面,在Executors頁簽下,查看狀態為Dead的Executor節點對應的stderrstdout日志,查看具體報錯原因。

    解決方法:

    • 優化Spark應用,避免大內存占用。

    • 調大Executor資源規格(spark.executor.resourceSpec)。

  • 原因3:

    集群開啟了動態資源分配(spark.dynamicAllocation.enabled),狀態為Dead的Executor節點日志中包含Driver commend a shutdown錯誤信息

    解決方法:

    該報錯不會影響業務的正常運行,您無需處理。

除上述原因外,如果還有其他報錯,您可查看狀態為Dead的Executor節點日志。如果報錯位置在業務代碼中,您需要提交工單聯系技術支持解決;其他錯誤信息,您可以搜索相關報錯信息自行解決。

Spark訪問外部數據源時,為什么會出現網絡連接失敗問題?

原因:通過VPC訪問外部數據源時未開啟ENI。

解決方法:您需在提交的Spark應用中設置spark.adb.eni.enabledspark.adb.eni.vswitchIdspark.adb.eni.securityGroupId參數,不同數據源數參數的配置方法不同。詳情請參見Spark應用配置參數說明訪問外部數據源

Spark SQL應用使用SHOW TABLES或SHOW DATABASE命令查詢庫表時,為什么顯示的庫表與實際庫表不符?

您需先確認AnalyticDB for MySQL企業版、基礎版及湖倉版集群提交的Spark SQL應用使用的元數據服務版本是否為adb,如果元數據服務版本為adb,您只能看到具有讀權限的庫表,其他庫表無法查看。如果為指定Hive MetaStore的版本,您需排查自建元數據服務的權限和連通性。元數據服務版本信息,請參見Spark應用配置參數說明

Spark應用為什么提示錯誤日志oss object 403?

  • 原因1:AnalyticDB for MySQL Spark不支持跨地域讀取JAR包或文件。

    解決方法:您需排查JAR包和文件所在的OSS Bucket是否與AnalyticDB for MySQL企業版、基礎版及湖倉版集群位于同一地域。

  • 原因2:spark.adb.roleArn參數指定的角色沒有讀取OSS的權限。

    解決方法:您需為RAM用戶授予對應權限。具體操作,請參見跨賬號授權

  • 原因3:文件地址填寫錯誤。

    解決方法:您需在Spark應用代碼中填寫正確的OSS路徑。

  • 原因4:文件與文件之間沒有用英文逗號(,)隔開或寫成JSON的格式。

    解決方法:您需確保Spark應用代碼為正確的JSON格式,且多個文件之間用英文逗號(,)分隔。

如何定位Spark應用運行速度變慢的原因?

說明

進入Spark UI的具體方法,請參見Spark開發編輯器

Spark應用異常導致運行速度變慢,您可以通過如下兩種方法排查:

  • 查看Spark Executor節點的狀態是否為Dead。

    查看方法:

    Spark Jar開發頁面,單擊目標Spark應用操作列的UI跳轉到對應的Spark UI頁面,在Executors頁簽下,查看Executors列表中Status字段信息。

    解決方法:

    請參見運行Spark應用時,為什么Spark Executor節點會出現Dead?

  • 查看Driver日志,是否有異常信息導致Task終止并重試。

    查看方法:

    Spark Jar開發頁面,單擊目標Spark應用操作列的UI跳轉到對應的Spark UI頁面,在Executors頁簽下,查看Executor IDdriverstderr日志。

    解決方法:

    通過日志中的報錯信息查看異常的具體原因,大部分異常原因跟業務邏輯相關,您可以對其進行排查或搜索相關報錯信息自行解決。

    說明

    如果出現OOM異常,則需要檢查業務邏輯是否有大內存占用,特別是某個字段特別大的情況。如果確實需要更大內存,您可以使用更大規格的Executor或Driver節點。

Spark應用無異常但運行速度變慢,您可以通過如下三種方法排查:

  • 查看資源是否充足。

    查看方法:

    Spark Jar開發頁面,單擊目標Spark應用操作列的UI跳轉到對應的Spark UI頁面,在Stages頁簽下,查看執行速度較慢的Stage,并查看該Stage的并發度(表中字段為:Tasks: Succeeded/Total)。如果Tasks的總數大于Executor個數*Executor核數的值,則存在資源不足。

    例如:某個Tasks的總數是100,spark.executor.instances=5,spark.executor.resourceSpec=medium(2核8 GB),那么每次只能運行10個Tasks,需要運行10次。

    解決方法:

    您需要增加Spark應用的資源總量,調大Executor節點的個數(spark.executor.instances),或調大Executor規格(spark.executor.resourceSpec)。建議Executor個數*Executor核數的值不超過同時運行Tasks的總數,否則會導致資源浪費。

  • 查看GC Time時間是否過長。

    查看方法:

    Spark Jar開發頁面,單擊目標Spark應用操作列的UI跳轉到對應的Spark UI頁面,在Executors頁簽下,查看Executors列表中Task Time (GC Time)字段信息。

    解決方法:

    如果某些Executor節點的GC Time時間較長時,可以選擇以下兩種方案解決:

    • 優化Spark應用的業務邏輯。

    • 增大Executor(spark.executor.resourceSpec)或Driver(spark.driver.resourceSpec)的節點規格。

  • 查看Driver或Executor堆棧信息。

    查看方法:

    Spark Jar開發頁面,單擊目標Spark應用操作列的UI跳轉到對應的Spark UI頁面,在Executors頁簽下,查看Thread Dump字段。

    重要

    堆棧信息僅在Status字段為running時才能查看。

    解決方法:

    多次刷新堆棧查看Spark應用運行中的問題:

    • 如果無法成功調用某些函數,則表示應用中函數邏輯的設計可能引入了熱點問題,或函數實現效率較低,建議您優化該部分的業務邏輯。

    • 如果無法調用某些Spark,建議通過搜索報錯信息來解決。

如何定期刪除Spark應用日志信息?

  1. 查看Spark應用日志信息的保存路徑。

    1. Spark UI頁面,單擊Environment頁簽

      說明

      進入Spark UI的具體方法,請參見Spark開發編輯器

    2. Environment頁簽下,單擊Spark Properties,查看spark.app.log.rootPath參數對應的Value,該Value即目標Spark應用日志信息的保存路徑。

  2. 設置日志信息的生命周期,自動刪除過期日志。具體操作,請參見基于最后一次修改時間的生命周期規則

如何解決創建UDF時,Spark應用卡住的問題?

原因:Spark社區版本從OSS下載文件時的已知Bug。

解決方法:在Spark應用中需要添加以下配置參數。參數說明,請參見Spark應用配置參數說明

SET spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES=oss://testBucketname/udf.jar;
SET spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES=oss://testBucketname/udf.jar;
SET spark.driver.extraClassPath=/tmp/testBucketname/udf.jar;
SET spark.executor.extraClassPath=/tmp/testBucketname/udf.jar;