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

本文為您介紹使用Spark過程中的常見問題。

問題類別

常見問題

開發(fā)Spark

作業(yè)報(bào)錯(cuò)

如何自檢項(xiàng)目工程?

建議您檢查如下內(nèi)容:

  • 檢查pom.xml

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_${scala.binary.version}</artifactId>
        <version>${spark.version}</version>
        <scope>provided</scope> // spark-xxxx_${scala.binary.version} 依賴scope必須是provided。
    </dependency>
  • 檢查主類spark.master

    val spark = SparkSession
          .builder()
          .appName("SparkPi")
          .config("spark.master", "local[4]") // 如果是以yarn-cluster方式提交,代碼中如果有l(wèi)ocal[N]的配置,將會(huì)報(bào)錯(cuò)。
          .getOrCreate()
  • 檢查主類Scala代碼。

    object SparkPi { // 必須是object,如果在IDEA創(chuàng)建文件的時(shí)候?qū)憺閏lass,main函數(shù)是無(wú)法加載的。
      def main(args: Array[String]) {
        val spark = SparkSession
          .builder()
          .appName("SparkPi")
          .getOrCreate()
  • 檢查主類代碼配置。

    val spark = SparkSession
          .builder()
          .appName("SparkPi")
          .config("key1", "value1")
          .config("key2", "value2")
          .config("key3", "value3")
          ...  // 如果執(zhí)行l(wèi)ocal測(cè)試時(shí),將MaxCompute配置在hard-code代碼里,部分配置是無(wú)法生效的。
          .getOrCreate()
    說明

    建議您在使用yarn-cluster方式提交任務(wù)時(shí),將配置項(xiàng)都寫在spark-defaults.conf中。

在DataWorks上運(yùn)行ODPS Spark節(jié)點(diǎn)的步驟是什么?

  1. 在本地Python環(huán)境中編輯Spark代碼并打包。本地Python環(huán)境版本要求為Python 2.7。

  2. 上傳資源包至DataWorks。詳情請(qǐng)參見創(chuàng)建并使用MaxCompute資源

  3. 在DataWorks上創(chuàng)建ODPS Spark節(jié)點(diǎn)。詳情請(qǐng)參見創(chuàng)建ODPS Spark節(jié)點(diǎn)

  4. 編寫代碼并運(yùn)行節(jié)點(diǎn),在DataWorks控制臺(tái)上即可查看運(yùn)行結(jié)果。

Spark on MaxCompute如何在本地進(jìn)行調(diào)試?

您可以通過IntelliJ IDEA在本地進(jìn)行調(diào)試。詳情請(qǐng)參見搭建Linux開發(fā)環(huán)境

如何通過Spark訪問VPC環(huán)境內(nèi)的服務(wù)?

更多通過Spark訪問VPC環(huán)境內(nèi)的服務(wù)信息,請(qǐng)參見Spark訪問VPC實(shí)例

如何把JAR包當(dāng)成資源來(lái)引用?

您可以通過參數(shù)spark.hadoop.odps.cupid.resources指定需要引用的資源。資源可以多個(gè)項(xiàng)目共享,建議您設(shè)置相關(guān)權(quán)限確保數(shù)據(jù)安全。示例如下。

spark.hadoop.odps.cupid.resources = projectname.xx0.jar,projectname.xx1.jar 

如何通過Spark傳入?yún)?shù)?

傳參詳情請(qǐng)參見Spark on DataWorks

如何將Spark流式讀取的DataHub數(shù)據(jù)寫入MaxCompute?

示例代碼請(qǐng)參見DataHub

如何將開源Spark代碼遷移至Spark on MaxCompute?

您可以根據(jù)作業(yè)場(chǎng)景選擇的遷移方案如下:

如何通過Spark處理MaxCompute中的表數(shù)據(jù)?

Spark on MaxCompute支持Local、Cluster和DataWorks運(yùn)行模式。三種模式的配置不同,詳情請(qǐng)參見運(yùn)行模式

如何設(shè)置Spark資源并行度?

Spark 資源并行度由Executor數(shù)量和Executor CPU核數(shù)共同決定,任務(wù)可并行執(zhí)行的最大Task數(shù)量為Executor數(shù)量 * Executor CPU核數(shù)

  • Executor數(shù)量

    • 參數(shù):spark.executor.instances

    • 參數(shù)說明:該參數(shù)用于設(shè)置作業(yè)申請(qǐng)的Executor數(shù)量。

  • Executor CPU核數(shù)

    • 參數(shù):spark.executor.cores

    • 參數(shù)說明:該參數(shù)用于設(shè)置每個(gè)Executor進(jìn)程的CPU核數(shù),決定每個(gè)Executor進(jìn)程并行執(zhí)行Task的能力,每個(gè)CPU核同一時(shí)間只能執(zhí)行一個(gè)Task。通常Executor的CPU核數(shù)設(shè)置為2~4較為合適。

如何解決內(nèi)存不足問題?

  • 常見報(bào)錯(cuò):

    • java.lang.OutOfMemoryError: Java heap space

    • java.lang.OutOfMemoryError: GC overhead limit exceeded

    • Cannot allocate memory

    • The job has been killed by "OOM Killer", please check your job's memory usage

  • 解決方案:

    • 設(shè)置Executor內(nèi)存。

      • 參數(shù):spark.executor.memory

      • 參數(shù)說明:代表每個(gè)Executor的內(nèi)存。通常與spark.executor.cores保持1:4設(shè)置即可,例如設(shè)置spark.executor.cores1spark.executor.memory4 GB。當(dāng)Executor拋出java.lang.OutOfMemoryError異常時(shí),需要調(diào)大該值。

    • 設(shè)置Executor堆外內(nèi)存。

      • 參數(shù):spark.executor.memoryOverhead

      • 參數(shù)說明:代表每個(gè)Executor的額外內(nèi)存,主要用于JVM自身、字符串、NIO Buffer等開銷。默認(rèn)大小為spark.executor.memory * 0.1,最小384 MB。通常不需要額外設(shè)置,當(dāng)Executor日志出現(xiàn)Cannot allocate memory或OOM Killer報(bào)錯(cuò)時(shí),需要調(diào)大該值。

    • 設(shè)置Driver內(nèi)存。

      • 參數(shù):spark.driver.memory

      • 參數(shù)說明:代表Driver的內(nèi)存大小。通常與spark.driver.cores保持1:4設(shè)置即可。當(dāng)Driver需要Collect較大數(shù)據(jù)量,或拋出java.lang.OutOfMemoryError異常時(shí),需要調(diào)大該值。

    • 設(shè)置Driver堆外內(nèi)存。

      • 參數(shù):spark.driver.memoryOverhead

      • 參數(shù)說明:代表Driver的額外內(nèi)存。默認(rèn)為大小spark.driver.memory * 0.1,最小384 MB。當(dāng)Driver日志出現(xiàn)Cannot allocate memory報(bào)錯(cuò),需要調(diào)大該值。

如何解決磁盤不足問題?

  • 問題現(xiàn)象

    出現(xiàn)報(bào)錯(cuò):No space left on device

  • 問題原因:該錯(cuò)誤意味著本地磁盤不足,通常該報(bào)錯(cuò)會(huì)在Executor中出現(xiàn),并導(dǎo)致Executor退出。

  • 解決方案:

    • 增加磁盤大小

      • 參數(shù):spark.hadoop.odps.cupid.disk.driver.device_size

      • 默認(rèn)值:20 GB。

      • 參數(shù)說明:默認(rèn)Driver和Executor各提供20GB的本地磁盤,當(dāng)磁盤空間不足時(shí)可以適當(dāng)調(diào)大該參數(shù)。注意該參數(shù)必須要配置在spark-defaults.conf或DataWorks的配置項(xiàng)中才會(huì)生效。

    • 增加Executor數(shù)量

      如果您調(diào)整本地磁盤大小到100GB以后,仍然報(bào)該錯(cuò)誤,說明單個(gè)Executor Shuffle數(shù)據(jù)已經(jīng)超過上限,可能是遇到了數(shù)據(jù)傾斜,這種情況下對(duì)數(shù)據(jù)重分區(qū)會(huì)有幫助。也可能確實(shí)是數(shù)據(jù)量太大,那就需要調(diào)整spark.executor.instances參數(shù),增加Executor的數(shù)量。

如何引用MaxCompute Project中的資源?

當(dāng)前Spark on MaxCompute支持以下兩種方式來(lái)訪問MaxCompute中的資源:

  • 通過參數(shù)配置直接引用MaxCompute資源。

    • 參數(shù):spark.hadoop.odps.cupid.resources

    • 參數(shù)格式:<projectname>.<resourcename>[:<newresourcename>]

    • 參數(shù)說明:該配置項(xiàng)指定了任務(wù)運(yùn)行所需要的MaxCompute資源,詳情請(qǐng)參見資源操作。指定的資源將被下載到Driver和Executor的當(dāng)前工作目錄。同一個(gè)任務(wù)可引用多個(gè)資源,資源之間用逗號(hào)分隔。資源下載到工作目錄后默認(rèn)名字是<projectname>.<resourcename>,在配置時(shí)通過<projectname>.<resourcename>:<newresourcename>進(jìn)行重命名。需要注意該配置項(xiàng)必須要配置在spark-default.conf中或DataWorks的配置項(xiàng)中才能生效。

    • 示例:

      ## 以下配置必須在DataWorks配置項(xiàng)/spark-defaults.conf文件中添加
      
      ## 同時(shí)引用多個(gè)資源:同時(shí)引用public.python-python-2.7-ucs4.zip和public.myjar.jar
      spark.hadoop.odps.cupid.resources=public.python-python-2.7-ucs4.zip,public.myjar.jar
      
      ## 重命名示例:引用并將public.myjar.jar重命名為myjar.jar
      spark.hadoop.odps.cupid.resources=public.myjar.jar:myjar.jar
  • 在DataWorks中引用資源。

    • 將MaxCompute中的資源添加至DataWorks數(shù)據(jù)開發(fā)面板的業(yè)務(wù)流程中,詳情請(qǐng)參見MaxCompute資源管理

    • 在DataWorks ODPS Spark節(jié)點(diǎn)中選擇jar、file、archive資源。

    說明

    該方案在任務(wù)運(yùn)行時(shí)會(huì)上傳資源,對(duì)于較大資源建議采用方案一進(jìn)行引用。

如何訪問VPC?

當(dāng)前Spark on MaxCompute支持以下兩種方式來(lái)訪問阿里云VPC中的服務(wù):

  • 反向訪問方式

    • 使用限制

      只能訪問與MaxCompute相同Region的阿里云VPC。

    • 使用流程:

      1. 在要訪問的服務(wù)中添加IP白名單,允許100.104.0.0/16網(wǎng)段的訪問。

      2. 作業(yè)配置spark.hadoop.odps.cupid.vpc.domain.list參數(shù)。

        該配置描述了需要訪問的一個(gè)或多個(gè)實(shí)例的網(wǎng)絡(luò)情況。配置值為JSON格式,需要把JSON壓縮成一行。示例如下,您需要將RegionID、VPCID、實(shí)例域名、端口等替換為實(shí)際值即可。

        ## 以下配置必須在DataWorks配置項(xiàng)/spark-defaults.conf文件中添加
        
        spark.hadoop.odps.cupid.vpc.domain.list={"regionId":"cn-beijing","vpcs":[{"vpcId":"vpc-2zeaeq21mb1dmkqh*****","zones":[{"urls":[{"domain":"dds-2ze3230cfea0*****.mongodb.rds.aliyuncs.com","port":3717},{"domain":"dds-2ze3230cfea0*****.mongodb.rds.aliyuncs.com","port":3717}]}]}]}
  • 通過ENI專線訪問

    • 使用限制

      通過ENI專線可以打通一個(gè)相同Region的VPC,如果您的作業(yè)需要同時(shí)訪問多個(gè)VPC,則可以將已經(jīng)通過ENI專線打通的VPC與其他VPC之間再做打通即可。

    • 使用流程:

      1. 自助開通ENI專線,詳情請(qǐng)參見Spark訪問VPC實(shí)例

      2. 在要訪問的服務(wù)中添加白名單,授權(quán)代表MaxCompute的安全組(即上一步中提供的安全組)能訪問的具體端口。

        例如需要訪問阿里云RDS,則需要在RDS中增加規(guī)則,允許第1步中創(chuàng)建的安全組訪問。如果用戶需要訪問的服務(wù)無(wú)法添加安全組,只能添加IP,那么需要將第一步中所使用的vSwitch網(wǎng)段都添加進(jìn)來(lái)。

      3. 作業(yè)配置spark.hadoop.odps.cupid.eni.infospark.hadoop.odps.cupid.eni.enable參數(shù)。

        使用示例如下,需要把RegionID和VPCID替換為實(shí)際值。

        ## 以下配置必須在DataWorks配置項(xiàng)/spark-defaults.conf文件中添加
        
        spark.hadoop.odps.cupid.eni.enable = true
        spark.hadoop.odps.cupid.eni.info = [regionid]:[vpcid]

如何訪問公網(wǎng)?

當(dāng)前Spark on MaxCompute支持以下兩種方式來(lái)訪問公網(wǎng)服務(wù):

  • 通過SmartNAT訪問

    假設(shè)需要訪問https://aliyundoc.com:443,流程如下。

    1. 您可以通過申請(qǐng)鏈接或搜索(釘釘群號(hào):11782920)加入MaxCompute開發(fā)者社區(qū)釘群聯(lián)系MaxCompute技術(shù)支持團(tuán)隊(duì)將https://aliyundoc.com:443加入到odps.security.outbound.internetlist中。

    2. 使用如下命令示例配置Spark作業(yè)級(jí)別的公網(wǎng)訪問白名單以及SmartNAT開關(guān)。

      ## 以下配置必須在DataWorks配置項(xiàng)/spark-defaults.conf文件中添加
      spark.hadoop.odps.cupid.internet.access.list=aliyundoc.com:443
      spark.hadoop.odps.cupid.smartnat.enable=true
  • 通過ENI專線訪問

    1. 自助開通ENI專線,詳情請(qǐng)參見Spark訪問VPC實(shí)例

    2. 確保專線VPC有訪問公網(wǎng)的能力,詳情請(qǐng)參見使用公網(wǎng)NAT網(wǎng)關(guān)SNAT功能訪問互聯(lián)網(wǎng)

    3. 使用如下命令示例配置Spark作業(yè)級(jí)別的公網(wǎng)訪問白名單以及ENI開關(guān),需要把RegionID和VPCID替換為實(shí)際值。

       ## 以下配置必須在DataWorks配置項(xiàng)/spark-defaults.conf文件中添加
      spark.hadoop.odps.cupid.internet.access.list=aliyundoc.com:443
      spark.hadoop.odps.cupid.eni.enable=true
      spark.hadoop.odps.cupid.eni.info=[region]:[vpcid]

如何訪問OSS?

當(dāng)前Spark on MaxCompute支持使用Jindo SDK來(lái)訪問阿里云OSS,需要配置以下信息:

  • 配置Jindo SDK及OSS Endpoint。

    命令示例如下。

    ## 引用JindoSDK Jar。以下配置必須在DataWorks配置項(xiàng)/spark-defaults.conf文件中添加
    spark.hadoop.odps.cupid.resources=public.jindofs-sdk-3.7.2.jar
    
    ## 設(shè)置OSS實(shí)現(xiàn)類。
    spark.hadoop.fs.AbstractFileSystem.oss.impl=com.aliyun.emr.fs.oss.OSS
    spark.hadoop.fs.oss.impl=com.aliyun.emr.fs.oss.JindoOssFileSystem
    
    ## 設(shè)置OSS Endpoint
    spark.hadoop.fs.oss.endpoint=oss-[YourRegionId]-internal.aliyuncs.com
    
    ## 通常無(wú)需設(shè)置OSS endpoint網(wǎng)絡(luò)白名單,若作業(yè)運(yùn)行過程中發(fā)現(xiàn)網(wǎng)絡(luò)不通,可以需要通過以下參數(shù)添加白名單。
    ## 以下配置必須在DataWorks配置項(xiàng)/spark-defaults.conf文件中添加
    spark.hadoop.odps.cupid.trusted.services.access.list=[YourBucketName].oss-[YourRegionId]-internal.aliyuncs.com
    說明

    在Spark on MaxCompute集群模式運(yùn)行時(shí)只支持OSS內(nèi)網(wǎng)Endpoint,不支持外網(wǎng)Endpoint。OSS Region和Endpoint映射請(qǐng)參見訪問域名和數(shù)據(jù)中心

  • 配置OSS鑒權(quán)信息,當(dāng)前Jindo SDK支持以下兩種方式鑒權(quán)。

    • 使用AccessKey鑒權(quán),配置示例如下:

      val conf = new SparkConf()
        .setAppName("jindo-sdk-demo")
        # 配置access-key鑒權(quán)參數(shù)
        .set("spark.hadoop.fs.oss.accessKeyId", "<YourAccessKeyId")
        .set("spark.hadoop.fs.oss.accessKeySecret", "<YourAccessKeySecret>")
    • 使用STS Token鑒權(quán),使用流程如下:

      1. 單擊一鍵授權(quán),將當(dāng)前云賬號(hào)的OSS資源通過StsToken的方式授權(quán)給MaxCompute項(xiàng)目直接訪問。

        說明

        當(dāng)MaxCompute的ProjectOwner為OSS云賬號(hào)時(shí),才可以執(zhí)行一鍵授權(quán)。

      2. 配置開啟本地HTTP服務(wù)。

        命令示例如下。

        ## 以下配置必須在DataWorks配置項(xiàng)/spark-defaults.conf文件中添加
        spark.hadoop.odps.cupid.http.server.enable = true
      3. 配置鑒權(quán)信息。

        命令示例如下。

        val conf = new SparkConf()
          .setAppName("jindo-sdk-demo")
          # 配置云服務(wù)角色鑒權(quán)
          # ${aliyun-uid}是阿里云用戶UID
          # ${role-name}是角色名稱
          .set("spark.hadoop.fs.jfs.cache.oss.credentials.provider", "com.aliyun.emr.fs.auth.CustomCredentialsProvider")
          .set("spark.hadoop.aliyun.oss.provider.url", "http://localhost:10011/sts-token-info?user_id=${aliyun-uid}&role=${role-name}")

如何引用Python三方庫(kù)?

  • 問題現(xiàn)象:PySpark作業(yè)運(yùn)行時(shí)拋出No module named 'xxx'異常。

  • 問題原因:PySpark作業(yè)依賴Python三方庫(kù),在當(dāng)前MaxCompute平臺(tái)默認(rèn)的Python環(huán)境中尚未安裝。

  • 解決方案:您可以采用以下幾種方案添加三方庫(kù)依賴。

    • 直接使用MaxCompute Python公共環(huán)境。

      您只需要在DataWorks配置項(xiàng)或spark-defaults.conf文件中添加以下配置即可,不同Python版本配置如下:

      • Python 2配置

        ## Python 2.7.13 配置
        ## 以下配置必須在DataWorks配置項(xiàng)/spark-defaults.conf文件中添加
        spark.hadoop.odps.cupid.resources = public.python-2.7.13-ucs4.tar.gz
        spark.pyspark.python = ./public.python-2.7.13-ucs4.tar.gz/python-2.7.13-ucs4/bin/python
        
        ## 三方庫(kù)列表
        https://odps-repo.oss-cn-hangzhou.aliyuncs.com/pyspark/py27/py27-default_req.txt.txt
      • Python 3配置

        ## Python 3.7.9 配置
        ## 以下配置必須在DataWorks配置項(xiàng)/spark-defaults.conf文件中添加
        spark.hadoop.odps.cupid.resources = public.python-3.7.9-ucs4.tar.gz
        spark.pyspark.python = ./public.python-3.7.9-ucs4.tar.gz/python-3.7.9-ucs4/bin/python3
        
        ## 三方庫(kù)列表
        https://odps-repo.oss-cn-hangzhou.aliyuncs.com/pyspark/py37/py37-default_req.txt
    • 上傳單個(gè)WHEEL包。

      該方案適用于Python三方依賴數(shù)量較少、較為簡(jiǎn)單的情況,命令示例如下。

      ##需要將wheel包重命名為zip包,例如將pymysql的wheel包重命名為pymysql.zip
      ##將重命名后的zip包上傳(文件類型為archive)
      ##在Dataworks spark節(jié)點(diǎn)引用該zip包(archive類型)
      ##在spark-defaults.conf或dataworks配置項(xiàng)中添加配置以下后即可import
      ## 配置
      spark.executorEnv.PYTHONPATH=pymysql
      spark.yarn.appMasterEnv.PYTHONPATH=pymysql
      
      ## 上傳代碼
      import pymysql
    • 上傳完整自定義Python環(huán)境。

      適用于依賴較為復(fù)雜或需要自定義Python版本的情況。您需利用Docker容器打包并上傳完整Python環(huán)境,詳情請(qǐng)參見Package依賴

如何解決Jar依賴沖突問題?

  • 問題現(xiàn)象:運(yùn)行時(shí)拋出NoClassDefFoundError或NoSuchMethodError異常。

  • 問題原因:通常是由于Jar包中的三方依賴與Spark依賴版本沖突,需要檢查上傳的主Jar包及三方依賴庫(kù),排除沖突的依賴。

  • 解決方案:

    • Pom自檢。

      • 將Spark社區(qū)版依賴設(shè)置為Provided。

      • 將Hadoop社區(qū)版依賴設(shè)置為Provided。

      • 將Odps/Cupid依賴設(shè)置為Provided。

    • 排除沖突的依賴。

    • 使用maven-shade-plugin relocation解決包沖突。

如何使用Local模式進(jìn)行調(diào)試?

  • Spark 2.3.0

    1. 在spark-defaults.conf中添加以下配置。

      spark.hadoop.odps.project.name =<Yourprojectname>
      spark.hadoop.odps.access.id =<YourAccessKeyID>
      spark.hadoop.odps.access.key =<YourAccessKeySecret>
      spark.hadoop.odps.end.point =<endpoint>
    2. 使用Local模式運(yùn)行任務(wù)。

      ./bin/spark-submit --master local spark_sql.py
  • Spark 2.4.5/Spark 3.1.1

    1. 創(chuàng)建odps.conf文件,并在文件中添加以下配置。

      odps.access.id=<YourAccessKeyID>
      odps.access.key=<YourAccessKeySecret>
      odps.end.point=<endpoint>
      odps.project.name=<Yourprojectname>
    2. 添加環(huán)境變量指向odps.conf文件位置。

      export ODPS_CONF_FILE=/path/to/odps.conf
    3. 使用Local模式運(yùn)行任務(wù)。

      ./bin/spark-submit --master local spark_sql.py
  • 常見報(bào)錯(cuò)

    • 報(bào)錯(cuò)1:

      • 報(bào)錯(cuò)信息:

        • Incomplete config, no accessId or accessKey

        • Incomplete config, no odps.service.endpoint

      • 報(bào)錯(cuò)原因:在Local模式開啟了EventLog。

      • 解決方案:將spark-defaults.conf中的spark.eventLog.enabled=true參數(shù)刪除即可。

    • 報(bào)錯(cuò)2:

      • 報(bào)錯(cuò)信息:Cannot create CupidSession with empty CupidConf

      • 報(bào)錯(cuò)原因:Spark 2.4.5或Spark 3.1.1 無(wú)法讀取odps.access.id等信息。

      • 解決方案:創(chuàng)建odps.conf文件,并添加環(huán)境變量后再運(yùn)行任務(wù)

    • 報(bào)錯(cuò)3:

      • 報(bào)錯(cuò)信息:java.util.NoSuchElementException: odps.access.id

      • 報(bào)錯(cuò)原因:Spark 2.3.0 無(wú)法讀取odps.access.id等信息。

      • 解決方案:在spark-defaults.conf中添加spark.hadoop.odps.access.id等配置信息。

運(yùn)行Spark作業(yè)時(shí),報(bào)錯(cuò)User signature dose not match,如何解決?

  • 問題現(xiàn)象

    運(yùn)行Spark作業(yè)時(shí),返回報(bào)錯(cuò)如下。

    Stack:
    com.aliyun.odps.OdpsException: ODPS-0410042:
    Invalid signature value - User signature dose not match
  • 產(chǎn)生原因

    身份驗(yàn)證未通過,AccessKey ID或AccessKey Secret有誤。

  • 解決措施

    請(qǐng)檢查spark-defaults.conf提供的AccessKey ID、AccessKey Secret和阿里云官網(wǎng)控制臺(tái)用戶信息管理中的AccessKey IDAccessKey Secret是否一致,如果不一致,請(qǐng)修改一致。

運(yùn)行Spark作業(yè)時(shí),報(bào)錯(cuò)You have NO privilege,如何解決?

  • 問題現(xiàn)象

    運(yùn)行Spark作業(yè)時(shí),返回報(bào)錯(cuò)如下。

    Stack:
    com.aliyun.odps.OdpsException: ODPS-0420095: 
    Access Denied - Authorization Failed [4019], You have NO privilege 'odps:CreateResource' on {acs:odps:*:projects/*}
  • 產(chǎn)生原因

    權(quán)限不足,需要申請(qǐng)權(quán)限。

  • 解決措施

    需要由項(xiàng)目所有者授予Resource的Read和Create權(quán)限。更多授權(quán)信息,請(qǐng)參見MaxCompute權(quán)限

運(yùn)行Spark作業(yè)時(shí),報(bào)錯(cuò)Access Denied,如何解決?

  • 問題現(xiàn)象

    運(yùn)行Spark作業(yè)時(shí),返回報(bào)錯(cuò)如下。

    Exception in thread "main" org.apache.hadoop.yarn.exceptions.YarnException: com.aliyun.odps.OdpsException: ODPS-0420095: Access Denied - The task is not in release range: CUPID
  • 產(chǎn)生原因

    • 原因一:Spark-defaults.conf中配置的AccessKey ID、AccessKey Secret不正確。

    • 原因二:項(xiàng)目所在的地域未提供Spark on MaxCompute服務(wù)。

  • 解決措施

    • 原因一的解決措施:檢查Spark-defaults.conf配置信息,修改為正確的AccessKey ID、AccessKey Secret。更多信息,請(qǐng)參見搭建Linux開發(fā)環(huán)境

    • 原因二的解決措施:確認(rèn)項(xiàng)目所在的地域是否已經(jīng)提供了Spark on MaxCompute服務(wù)或加入釘釘群21969532(Spark on MaxCompute支持群)咨詢。

運(yùn)行Spark作業(yè)時(shí),報(bào)錯(cuò)No space left on device,如何解決?

Spark使用網(wǎng)盤進(jìn)行本地存儲(chǔ)。Shuffle數(shù)據(jù)和BlockManager溢出的數(shù)據(jù)均存儲(chǔ)在網(wǎng)盤上。網(wǎng)盤的大小通過spark.hadoop.odps.cupid.disk.driver.device_size參數(shù)控制,默認(rèn)為20 GB,最大為100 GB。如果調(diào)整到100 GB仍然報(bào)此錯(cuò)誤,需要分析具體原因。常見原因?yàn)閿?shù)據(jù)傾斜,在Shuffle或者Cache過程中數(shù)據(jù)集中分布在某些Block。此時(shí)可以縮小單個(gè)Executor的核數(shù)(spark.executor.cores),增加Executor的數(shù)量(spark.executor.instances)。

運(yùn)行Spark作業(yè)時(shí),報(bào)錯(cuò)Table or view not found,如何解決?

  • 問題現(xiàn)象

    運(yùn)行Spark作業(yè)時(shí),返回報(bào)錯(cuò)如下。

    Table or view not found:xxx
  • 產(chǎn)生原因

    • 原因一:表或視圖不存在。

    • 原因二:打開了Hive的catalog配置。

  • 解決措施

    • 原因一的解決措施:請(qǐng)創(chuàng)建表。

    • 原因二的解決措施:去掉catalog配置。報(bào)錯(cuò)示例如下,需要去掉enableHiveSupport()

      spark = SparkSession.builder.appName(app_name).enableHiveSupport().getOrCreate()

運(yùn)行Spark作業(yè)時(shí),報(bào)錯(cuò)Shutdown hook called before final status was reported,如何解決?

  • 問題現(xiàn)象

    運(yùn)行Spark作業(yè)時(shí),返回報(bào)錯(cuò)如下。

    App Status: SUCCEEDED, diagnostics: Shutdown hook called before final status was reported.
  • 產(chǎn)生原因

    提交到集群的user main并沒有通過AM(ApplicationMaster)申請(qǐng)集群資源。例如,用戶沒有新建SparkContext或用戶在代碼中設(shè)置spark.master為local。

運(yùn)行Spark作業(yè)時(shí),發(fā)生JAR包版本沖突類錯(cuò)誤,如何解決?

  • 問題現(xiàn)象

    運(yùn)行Spark作業(yè)時(shí),返回報(bào)錯(cuò)如下。

    User class threw exception: java.lang.NoSuchMethodError
  • 產(chǎn)生原因

    JAR包版本沖突或類錯(cuò)誤。

  • 解決措施

    1. $SPARK_HOME/jars路徑下找出異常類所在的JAR。

    2. 執(zhí)行如下命令定位第三方庫(kù)的坐標(biāo)以及版本。

      grep <異常類類名> $SPARK_HOME/jars/*.jar
    3. 在Spark作業(yè)根目錄下,執(zhí)行如下命令查看整個(gè)工程的所有依賴。

      mvn dependency:tree
    4. 找到對(duì)應(yīng)的依賴后,執(zhí)行如下命令排除沖突包。

      maven dependency exclusions
    5. 重新編譯并提交代碼。

運(yùn)行Spark作業(yè)時(shí),報(bào)錯(cuò)ClassNotFound,如何解決?

  • 問題現(xiàn)象

    運(yùn)行Spark作業(yè)時(shí),返回報(bào)錯(cuò)如下。

    java.lang.ClassNotFoundException: xxxx.xxx.xxxxx
  • 產(chǎn)生原因

    類不存在或依賴配置錯(cuò)誤。

  • 解決措施

    1. 執(zhí)行如下命令查看您提交的JAR包中是否存在該類定義。

      jar -tf <作業(yè)JAR包> | grep <類名稱>
    2. 檢查pom.xml文件中的依賴是否正確。

    3. 使用Shade方式提交JAR包。

運(yùn)行Spark作業(yè)時(shí),報(bào)錯(cuò)The task is not in release range,如何解決?

  • 問題現(xiàn)象

    運(yùn)行Spark作業(yè)時(shí),返回報(bào)錯(cuò)如下。

    The task is not in release range: CUPID
  • 產(chǎn)生原因

    項(xiàng)目所在地域未開通Spark on MaxCompute服務(wù)。

  • 解決措施

    請(qǐng)您選擇已經(jīng)開啟Spark on MaxCompute服務(wù)的地域使用。

運(yùn)行Spark作業(yè)時(shí),報(bào)錯(cuò)java.io.UTFDataFormatException,如何解決?

  • 問題現(xiàn)象

    運(yùn)行Spark作業(yè)時(shí),返回報(bào)錯(cuò)如下。

    java.io.UTFDataFormatException: encoded string too long: 2818545 bytes 
  • 解決措施

    調(diào)整spark-defaults.confspark.hadoop.odps.cupid.disk.driver.device_size參數(shù)的值。默認(rèn)為20 GB,最大支持100 GB。

運(yùn)行Spark作業(yè)時(shí),打印的中文亂碼,如何解決?

您需要添加如下配置。

"--conf" "spark.executor.extraJavaOptions=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
"--conf" "spark.driver.extraJavaOptions=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"

Spark調(diào)用外網(wǎng)第三方任務(wù)時(shí)報(bào)錯(cuò),如何解決?

Spark不能調(diào)用外網(wǎng)第三方任務(wù),網(wǎng)絡(luò)不通。

您可以在VPC中搭建Nginx反向代理,通過代理訪問外網(wǎng)。Spark支持直接訪問VPC,詳情請(qǐng)參見Spark訪問VPC實(shí)例