Tous les produits
Search
Centre de documentation

:Questions fréquentes sur Spark

Dernière mise à jour :Aug 10, 2026

Cette rubrique répertorie les questions fréquentes lors de l'utilisation de Spark.

Catégorie de problème

Questions fréquentes

Développement Spark

Erreurs de tâche

Comment vérifier le projet ?

Vérifiez les éléments suivants :

  • Vérifiez le fichier 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>
  • Vérifiez le paramètre spark.master dans la classe principale.

    val spark = SparkSession
          .builder()
          .appName("SparkPi")
          .config("spark.master", "local[4]") // 如果是以yarn-cluster方式提交,代码中如果有local[N]的配置,将会报错。
          .getOrCreate()
  • Vérifiez le code Scala de la classe principale.

    object SparkPi { // 必须是object,如果在IDEA创建文件的时候写为class,main函数是无法加载的。
      def main(args: Array[String]) {
        val spark = SparkSession
          .builder()
          .appName("SparkPi")
          .getOrCreate()
  • Vérifiez la configuration du code de la classe principale.

    val spark = SparkSession
          .builder()
          .appName("SparkPi")
          .config("key1", "value1")
          .config("key2", "value2")
          .config("key3", "value3")
          ...  // 如果执行local测试时,将MaxCompute配置在hard-code代码里,部分配置是无法生效的。
          .getOrCreate()
    Remarque

    Pour soumettre des tâches via yarn-cluster, définissez tous les paramètres de configuration dans le fichier spark-defaults.conf.

Quelles sont les étapes pour exécuter un nœud ODPS Spark sur DataWorks ?

  1. Modifiez le code Spark et empaquetez-le dans votre environnement Python local (Python 2.7 requis).

  2. Téléchargez le package de ressources vers DataWorks. Pour plus d'informations, consultez Create and use MaxCompute resources.

  3. Créez un nœud ODPS Spark sur DataWorks. Pour plus d'informations, consultez 创建ODPS Spark节点.

  4. Écrivez le code et exécutez le nœud. Affichez les résultats d'exécution dans la console DataWorks.

Comment déboguer Spark on MaxCompute en local ?

Effectuez un débogage local avec IntelliJ IDEA. Pour plus d'informations, consultez Set up a Linux development environment.

Comment accéder aux services d'un environnement VPC via Spark ?

Pour accéder aux services d'un environnement VPC via Spark, consultez Spark访问VPC实例.

Comment référencer un fichier JAR en tant que ressource ?

Spécifiez les ressources à référencer via le paramètre spark.hadoop.odps.cupid.resources. Les ressources peuvent être partagées entre plusieurs projets. Définissez les autorisations appropriées pour garantir la sécurité des données. Exemple :

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

Comment transmettre des paramètres à Spark ?

Pour plus d'informations sur la transmission de paramètres, consultez Spark on DataWorks.

Comment écrire dans MaxCompute les données DataHub lues en flux par Spark ?

Consultez l'exemple de code sur DataHub.

Comment migrer du code Spark open source vers Spark on MaxCompute ?

Sélectionnez le plan de migration adapté à votre scénario parmi les options suivantes :

Comment traiter les données de table MaxCompute avec Spark ?

Spark on MaxCompute prend en charge les modes d'exécution Local, Cluster et DataWorks. La configuration varie selon le mode. Pour plus d'informations, consultez 运行模式.

Comment définir le parallélisme des ressources Spark ?

Le parallélisme des ressources Spark dépend du nombre d'executors et du nombre de cœurs CPU par executor. Le nombre maximal de tâches exécutables en parallèle est égal à Executor数量 * Executor CPU核数.

  • Nombre d'executors

    • Paramètre : spark.executor.instances.

    • Description : définit le nombre d'executors demandés par la tâche.

  • Nombre de cœurs CPU par executor

    • Paramètre : spark.executor.cores.

    • Description : définit le nombre de cœurs CPU par processus executor, déterminant sa capacité d'exécution parallèle. Chaque cœur CPU ne peut exécuter qu'une seule tâche à la fois. Il est recommandé de définir ce nombre entre 2~4.

Comment résoudre les problèmes de mémoire insuffisante ?

  • Erreurs courantes :

    • 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.

  • Solutions :

    • Définissez la mémoire de l'executor.

      • Paramètre : spark.executor.memory.

      • Description : représente la mémoire allouée à chaque executor. Maintenez généralement un ratio de 1:4 avec spark.executor.cores. Par exemple, si spark.executor.cores est défini sur 1, définissez spark.executor.memory sur 4 GB. Augmentez cette valeur si l'executor génère l'exception java.lang.OutOfMemoryError.

    • Définissez la mémoire hors tas (off-heap) de l'executor.

      • Paramètre : spark.executor.memoryOverhead.

      • Description : représente la mémoire supplémentaire de chaque executor (JVM, chaînes, buffers NIO, etc.). La valeur par défaut est spark.executor.memory * 0.1 (minimum 384 Mo). Aucun réglage supplémentaire n'est généralement nécessaire. Augmentez cette valeur si les journaux de l'executor affichent l'erreur Cannot allocate memory ou une erreur OOM Killer.

    • Définissez la mémoire du driver.

      • Paramètre : spark.driver.memory.

      • Description : représente la taille de la mémoire du driver. Maintenez généralement un ratio de 1:4 avec spark.driver.cores. Augmentez cette valeur si le driver doit collecter un volume de données important ou s'il génère l'exception java.lang.OutOfMemoryError.

    • Définissez la mémoire hors tas (off-heap) du driver.

      • Paramètre : spark.driver.memoryOverhead.

      • Description : représente la mémoire supplémentaire du driver. La valeur par défaut est spark.driver.memory * 0.1 (minimum 384 Mo). Augmentez cette valeur si les journaux du driver affichent l'erreur Cannot allocate memory.

Comment résoudre les problèmes d'espace disque insuffisant ?

  • Symptômes

    L'erreur suivante s'affiche : No space left on device.

  • Cause : manque d'espace sur le disque local. Cette erreur survient généralement au niveau de l'executor et entraîne son arrêt.

  • Solution :

    • Augmentez la taille du disque.

      • Paramètre : spark.hadoop.odps.cupid.disk.driver.device_size.

      • Valeur par défaut : 20 Go.

      • Description : par défaut, le driver et l'executor disposent chacun de 20 Go d'espace disque local. Augmentez ce paramètre si l'espace est insuffisant. Ce paramètre doit être configuré dans le fichier spark-defaults.conf ou dans les paramètres de DataWorks pour prendre effet.

    • Augmentez le nombre d'executors.

      Si l'erreur persiste après avoir augmenté la taille du disque local à 100 Go, les données de shuffle d'un seul executor ont dépassé la limite maximale. Il peut s'agir d'un déséquilibre des données (data skew) ; repartitionnez les données. Si le volume de données est simplement trop important, ajustez le paramètre spark.executor.instances pour augmenter le nombre d'executors.

Comment référencer les ressources d'un projet MaxCompute ?

Spark on MaxCompute prend en charge deux méthodes pour accéder aux ressources MaxCompute :

  • Référencement direct via la configuration des paramètres.

    • Paramètre : spark.hadoop.odps.cupid.resources.

    • Format : <projectname>.<resourcename>[:<newresourcename>].

    • Description : spécifie les ressources MaxCompute requises pour la tâche. Pour plus d'informations, consultez Manage resources. Les ressources spécifiées sont téléchargées dans le répertoire de travail actuel du driver et des executors. Une même tâche peut référencer plusieurs ressources (séparées par des virgules). Le nom par défaut des ressources téléchargées est <projectname>.<resourcename>. Renommez-les lors de la configuration avec le format <projectname>.<resourcename>:<newresourcename>. Ce paramètre doit être configuré dans le fichier spark-default.conf ou dans les paramètres de DataWorks pour prendre effet.

    • Exemple :

      ## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加
      
      ## 同时引用多个资源:同时引用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
  • Référencement des ressources dans DataWorks.

    • Ajoutez les ressources MaxCompute au flux de travail du panneau de développement de données DataWorks. Pour plus d'informations, consultez Manage MaxCompute resources.

    • Dans le nœud ODPS Spark de DataWorks, sélectionnez les ressources de type jar, file ou archive.

    Remarque

    Cette solution implique le téléchargement des ressources lors de l'exécution. Pour les ressources volumineuses, utilisez la première solution.

Comment accéder au VPC ?

Spark on MaxCompute prend en charge la méthode suivante pour accéder aux services d'un VPC Alibaba Cloud :

  • Accès via une ligne dédiée ENI

    • Limites d'utilisation

      Une ligne dédiée ENI permet de se connecter à un VPC situé dans la même région. Si votre tâche doit accéder simultanément à plusieurs VPC, connectez le VPC déjà relié via ENI aux autres VPC.

    • Procédure :

      1. Activez la ligne dédiée ENI. Pour plus d'informations, consultez Spark访问VPC实例.

      2. Ajoutez le groupe de sécurité représentant MaxCompute (fourni à l'étape précédente) à la liste d'autorisation du service cible, en autorisant les ports spécifiques.

        Par exemple, pour accéder à Alibaba Cloud RDS, ajoutez une règle dans RDS autorisant le groupe de sécurité créé à l'étape 1. Si le service cible n'accepte que les adresses IP (pas de groupe de sécurité), ajoutez toutes les plages de sous-réseaux vSwitch utilisées à la première étape.

      3. Configurez les paramètres spark.hadoop.odps.cupid.eni.info et spark.hadoop.odps.cupid.eni.enable pour la tâche.

        Exemple d'utilisation. Remplacez RegionID et VPCID par vos valeurs réelles.

        ## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加
        
        spark.hadoop.odps.cupid.eni.enable = true
        spark.hadoop.odps.cupid.eni.info = [regionid]:[vpcid]

Comment accéder à Internet ?

Spark on MaxCompute prend en charge deux méthodes pour accéder aux services Internet :

  • Accès via une ligne dédiée ENI

    1. Activez la ligne dédiée ENI. Pour plus d'informations, consultez Spark访问VPC实例.

    2. Assurez-vous que le VPC de la ligne dédiée dispose d'un accès à Internet. Pour plus d'informations, consultez Use the SNAT feature of an Internet NAT gateway to access the Internet.

    3. Utilisez l'exemple de commande suivant pour configurer la liste d'autorisation d'accès Internet au niveau de la tâche Spark et activer ENI. Remplacez RegionID et VPCID par vos valeurs réelles.

       ## 以下配置必须在DataWorks配置项/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]
  • Accès via SmartNAT

    Limites : cette solution ne prend pas en charge Spark 3.4 et versions ultérieures.

    Supposons que vous deviez accéder à https://aliyundoc.com:443. Procédez comme suit.

    1. rechercher le numéro de groupe DingTalk 11782920 pour rejoindre la communauté des développeurs MaxCompute sur DingTalk, puis contacter l'équipe d'assistance technique MaxCompute afin d'ajouter https://aliyundoc.com:443 à la liste odps.security.outbound.internetlist.

    2. Utilisez l'exemple de commande suivant pour configurer la liste d'autorisation d'accès Internet au niveau de la tâche Spark et activer SmartNAT.

    3. ## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加
      spark.hadoop.odps.cupid.internet.access.list=aliyundoc.com:443
      spark.hadoop.odps.cupid.smartnat.enable=true

Comment accéder à OSS ?

Spark on MaxCompute prend en charge l'accès à Alibaba Cloud OSS via le SDK Jindo. Configurez les informations suivantes :

  • Configurez le SDK Jindo et le point de terminaison OSS.

    Exemple de commande.

    ## 引用JindoSDK Jar。以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加
    spark.hadoop.odps.cupid.resources=public.jindofs-sdk-3.7.2.jar
    
    ## 设置OSS实现类。
    spark.hadoop.fs.AbstractFileSystem.oss.impl=com.aliyun.emr.fs.oss.OSS
    spark.hadoop.fs.oss.impl=com.aliyun.emr.fs.oss.JindoOssFileSystem
    
    ## 设置OSS Endpoint
    spark.hadoop.fs.oss.endpoint=oss-[YourRegionId]-internal.aliyuncs.com
    
    ## 通常无需设置OSS endpoint网络白名单,若作业运行过程中发现网络不通,可以通过以下参数添加白名单。
    ## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加
    spark.hadoop.odps.cupid.trusted.services.access.list=[YourBucketName].oss-[YourRegionId]-internal.aliyuncs.com
    Remarque

    En mode cluster Spark on MaxCompute, seuls les points de terminaison internes OSS sont pris en charge. Pour la correspondance entre les régions OSS et les points de terminaison, consultez Regions and endpoints.

  • Configurez les informations d'authentification OSS. Le SDK Jindo prend en charge deux méthodes d'authentification.

    • Authentification par AccessKey. Exemple de configuration :

      val conf = new SparkConf()
        .setAppName("jindo-sdk-demo")
        # 配置access-key鉴权参数
        .set("spark.hadoop.fs.oss.accessKeyId", "<YourAccessKeyId>")
        .set("spark.hadoop.fs.oss.accessKeySecret", "<YourAccessKeySecret>")
    • Authentification par jeton STS. Procédure :

      1. Cliquez sur Autorisation en un clic pour autoriser le projet MaxCompute à accéder directement aux ressources OSS de votre compte cloud actuel via un jeton StsToken.

        Remarque

        L'autorisation en un clic n'est possible que si le propriétaire du projet MaxCompute est le compte cloud OSS.

      2. Configurez l'activation du service HTTP local.

        Exemple de commande.

        ## 以下配置必须在DataWorks配置项/spark-defaults.conf文件中添加
        spark.hadoop.odps.cupid.http.server.enable = true
      3. Configurez les informations d'authentification.

        Exemple de commande.

        val conf = new SparkConf()
          .setAppName("jindo-sdk-demo")
          # 配置云服务角色鉴权
          # ${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}")

Comment référencer des bibliothèques Python tierces ?

  • Symptôme : l'exécution de la tâche PySpark génère l'exception No module named 'xxx'.

  • Cause : la tâche PySpark dépend de bibliothèques Python tierces non installées dans l'environnement Python par défaut de la plateforme MaxCompute.

  • Solution : ajoutez les dépendances de bibliothèques tierces via l'une des méthodes suivantes.

    • Utilisez l'environnement Python public MaxCompute.

      Ajoutez la configuration suivante dans les paramètres de DataWorks ou dans le fichier spark-defaults.conf. Les configurations varient selon la version de Python :

      • Configuration pour Python 2

        ## Python 2.7.13 配置
        ## 以下配置必须在DataWorks配置项/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
        
        ## 三方库列表
        https://odps-repo.oss-cn-hangzhou.aliyuncs.com/pyspark/py27/py27-default_req.txt
      • Configuration pour Python 3

        ## Python 3.7.9 配置
        ## 以下配置必须在DataWorks配置项/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
        
        ## 三方库列表
        https://odps-repo.oss-cn-hangzhou.aliyuncs.com/pyspark/py37/py37-default_req.txt
    • Téléchargez un seul package WHEEL.

      Cette solution convient aux cas simples avec peu de dépendances Python tierces. Exemple de commande.

      ##需要将wheel包重命名为zip包,例如将pymysql的wheel包重命名为pymysql.zip
      ##将重命名后的zip包上传(文件类型为archive)
      ##在Dataworks spark节点引用该zip包(archive类型)
      ##在spark-defaults.conf或dataworks配置项中添加以下配置后即可import
      ## 配置
      spark.executorEnv.PYTHONPATH=pymysql
      spark.yarn.appMasterEnv.PYTHONPATH=pymysql
      
      ## 上传代码
      import pymysql
    • Téléchargez un environnement Python personnalisé complet.

      Cette solution convient aux dépendances complexes ou aux versions Python personnalisées. Utilisez un conteneur Docker pour empaqueter et télécharger l'environnement Python complet. Pour plus d'informations, consultez Package依赖.

Comment résoudre les conflits de dépendances JAR ?

  • Symptôme : l'exécution génère l'exception NoClassDefFoundError或NoSuchMethodError.

  • Cause : conflit de version entre les dépendances tierces incluses dans le fichier JAR et les dépendances Spark. Vérifiez le fichier JAR principal et les bibliothèques de dépendances tierces, et excluez les dépendances conflictuelles.

  • Solution :

    • Auto-vérification du fichier POM.

      • Définissez les dépendances de la version communautaire Spark avec la portée Provided.

      • Définissez les dépendances de la version communautaire Hadoop avec la portée Provided.

      • Définissez les dépendances Odps/Cupid avec la portée Provided.

    • Excluez les dépendances conflictuelles.

    • Utilisez maven-shade-plugin relocation pour résoudre les conflits de packages.

Comment utiliser le mode Local pour le débogage ?

  • Spark 2.3.0

    1. Ajoutez la configuration suivante au fichier 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. Exécutez la tâche en mode Local.

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

    1. Créez un fichier odps.conf et ajoutez-y la configuration suivante.

      odps.access.id=<YourAccessKeyID>
      odps.access.key=<YourAccessKeySecret>
      odps.end.point=<endpoint>
      odps.project.name=<Yourprojectname>
    2. Ajoutez une variable d'environnement pointant vers l'emplacement du fichier odps.conf.

      export ODPS_CONF_FILE=/path/to/odps.conf
    3. Exécutez la tâche en mode Local.

      ./bin/spark-submit --master local spark_sql.py
  • Erreurs courantes

    • Erreur 1 :

      • Message d'erreur :

        • Incomplete config, no accessId or accessKey.

        • Incomplete config, no odps.service.endpoint.

      • Cause : EventLog est activé en mode Local.

      • Solution : supprimez le paramètre spark.eventLog.enabled=true du fichier spark-defaults.conf.

    • Erreur 2 :

      • Message d'erreur : Cannot create CupidSession with empty CupidConf.

      • Cause : Spark 2.4.5 ou Spark 3.1.1 ne parvient pas à lire les informations telles que odps.access.id.

      • Solution : créez un fichier odps.conf, ajoutez la variable d'environnement, puis exécutez la tâche.

    • Erreur 3 :

      • Message d'erreur : java.util.NoSuchElementException: odps.access.id.

      • Cause : Spark 2.3.0 ne parvient pas à lire les informations telles que odps.access.id.

      • Solution : ajoutez les informations de configuration telles que spark.hadoop.odps.access.id dans le fichier spark-defaults.conf.

Lors de l'exécution d'une tâche Spark, l'erreur « User signature does not match » s'affiche. Comment la résoudre ?

  • Symptôme

    Lors de l'exécution d'une tâche Spark, l'erreur suivante est renvoyée.

    Stack:
    com.aliyun.odps.OdpsException: ODPS-0410042:
    Invalid signature value - User signature does not match
  • Cause

    Échec de l'authentification dû à un AccessKey ID ou un AccessKey Secret incorrect.

  • Solution

    Vérifiez que l'AccessKey ID et l'AccessKey Secret fournis dans le fichier spark-defaults.conf correspondent à ceux indiqués dans la console Alibaba Cloud, sous Gestion des informations utilisateur, dans les champs AccessKey ID et AccessKey Secret. Corrigez-les s'ils diffèrent.

Lors de l'exécution d'une tâche Spark, l'erreur « You have NO privilege » s'affiche. Comment la résoudre ?

  • Symptôme

    Lors de l'exécution d'une tâche Spark, l'erreur suivante est renvoyée.

    Stack:
    com.aliyun.odps.OdpsException: ODPS-0420095: 
    Access Denied - Authorization Failed [4019], You have NO privilege 'odps:CreateResource' on {acs:odps:*:projects/*}
  • Cause

    Autorisations insuffisantes. Demandez les autorisations nécessaires.

  • Solution

    Le propriétaire du projet doit accorder les autorisations Read et Create sur les ressources. Pour plus d'informations, consultez MaxCompute permissions.

Lors de l'exécution d'une tâche Spark, l'erreur « Access Denied » s'affiche. Comment la résoudre ?

  • Symptôme

    Lors de l'exécution d'une tâche Spark, l'erreur suivante est renvoyée.

    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
  • Cause

    • Cause 1 : l'AccessKey ID ou l'AccessKey Secret configuré dans le fichier Spark-defaults.conf est incorrect.

    • Cause 2 : la région du projet ne fournit pas le service Spark on MaxCompute.

  • Solution

    • Solution pour la cause 1 : vérifiez la configuration du fichier Spark-defaults.conf et corrigez l'AccessKey ID et l'AccessKey Secret. Pour plus d'informations, consultez Set up a Linux development environment.

    • Solution pour la cause 2 : vérifiez si la région du projet fournit le service Spark on MaxCompute, ou rejoignez le groupe DingTalk 21969532 (groupe de support Spark on MaxCompute) pour obtenir de l'aide.

Lors de l'exécution d'une tâche Spark, l'erreur « No space left on device » s'affiche. Comment la résoudre ?

Spark utilise un disque réseau pour le stockage local. Les données de shuffle et les données溢出的 de BlockManager y sont stockées. La taille du disque réseau est contrôlée par le paramètre spark.hadoop.odps.cupid.disk.driver.device_size (par défaut 20 Go, maximum 100 Go). Si l'erreur persiste après augmentation à 100 Go, analysez la cause précise. Une cause fréquente est le déséquilibre des données (data skew), où les données se concentrent sur certains blocs lors du shuffle ou du cache. Réduisez le nombre de cœurs par executor (paramètre spark.executor.cores) et augmentez le nombre d'executors (paramètre spark.executor.instances).

Lors de l'exécution d'une tâche Spark, l'erreur « Table or view not found » s'affiche. Comment la résoudre ?

  • Symptôme

    Lors de l'exécution d'une tâche Spark, l'erreur suivante est renvoyée.

    Table or view not found:xxx
  • Cause

    • Cause 1 : la table ou la vue n'existe pas.

    • Cause 2 : la configuration du catalogue Hive est activée.

  • Solution

    • Solution pour la cause 1 : créez la table.

    • Solution pour la cause 2 : supprimez la configuration du catalogue. Comme illustré ci-dessous, retirez enableHiveSupport().

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

Lors de l'exécution d'une tâche Spark, l'erreur « Shutdown hook called before final status was reported » s'affiche. Comment la résoudre ?

  • Symptôme

    Lors de l'exécution d'une tâche Spark, l'erreur suivante est renvoyée.

    App Status: SUCCEEDED, diagnostics: Shutdown hook called before final status was reported.
  • Cause

    La fonction principale de l'utilisateur soumise au cluster n'a pas demandé de ressources cluster via AM (ApplicationMaster). Par exemple, l'utilisateur n'a pas créé de nouveau SparkContext ou a défini spark.master sur local dans le code.

Lors de l'exécution d'une tâche Spark, des erreurs de conflit de version JAR surviennent. Comment les résoudre ?

  • Symptôme

    Lors de l'exécution d'une tâche Spark, l'erreur suivante est renvoyée.

    User class threw exception: java.lang.NoSuchMethodError
  • Cause

    Conflit de version de fichier JAR ou erreur de classe.

  • Solution

    1. Identifiez le fichier JAR contenant la classe problématique dans le répertoire $SPARK_HOME/jars, puis exécutez la commande suivante pour localiser les coordonnées et la version de la bibliothèque tierce.

      grep <异常类类名> $SPARK_HOME/jars/*.jar
    2. Dans le répertoire racine de la tâche Spark, exécutez la commande suivante pour afficher toutes les dépendances du projet.

      mvn dependency:tree
    3. Une fois la dépendance concernée identifiée, exécutez la commande suivante pour exclure le package conflictuel.

      maven dependency exclusions
    4. Recompilez et soumettez à nouveau le code.

Lors de l'exécution d'une tâche Spark, l'erreur « ClassNotFound » s'affiche. Comment la résoudre ?

  • Symptôme

    Lors de l'exécution d'une tâche Spark, l'erreur suivante est renvoyée.

    java.lang.ClassNotFoundException: xxxx.xxx.xxxxx
  • Cause

    La classe n'existe pas ou la configuration des dépendances est incorrecte.

  • Solution

    1. Exécutez la commande suivante pour vérifier si la définition de la classe existe dans le fichier JAR soumis.

      jar -tf <作业JAR包> | grep <类名称>
    2. Vérifiez que les dépendances dans le fichier pom.xml sont correctes.

    3. Soumettez le fichier JAR en utilisant la méthode Shade.

Lors de l'exécution d'une tâche Spark, l'erreur « The task is not in release range » s'affiche. Comment la résoudre ?

  • Symptôme

    Lors de l'exécution d'une tâche Spark, l'erreur suivante est renvoyée.

    The task is not in release range: CUPID
  • Cause

    Le service Spark on MaxCompute n'est pas activé dans la région du projet.

  • Solution

    Sélectionnez une région où le service Spark on MaxCompute est activé.

Lors de l'exécution d'une tâche Spark, l'erreur « java.io.UTFDataFormatException » s'affiche. Comment la résoudre ?

  • Symptôme

    Lors de l'exécution d'une tâche Spark, l'erreur suivante est renvoyée.

    java.io.UTFDataFormatException: encoded string too long: 2818545 bytes 
  • Solution

    Ajustez la valeur du paramètre spark.hadoop.odps.cupid.disk.driver.device_size dans le fichier spark-defaults.conf. La valeur par défaut est de 20 Go, avec un maximum de 100 Go.

Lors de l'exécution d'une tâche Spark, les caractères chinois affichés sont illisibles. Comment résoudre ce problème ?

Ajoutez la configuration suivante.

"--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 renvoie une erreur lors de l'appel de tâches tierces externes. Comment la résoudre ?

Spark ne peut pas appeler directement des tâches tierces externes en raison de problèmes de connectivité réseau.

Configurez un proxy inverse Nginx dans le VPC pour accéder à Internet. Spark prend en charge l'accès direct au VPC. Pour plus d'informations, consultez Spark访问VPC实例.