Tous les produits
Search
Centre de documentation

E-MapReduce:Use ECI to elastically schedule Spark jobs

Dernière mise à jour :Sep 22, 2026

Utilisez Elastic Container Instance (ECI) pour planifier des tâches Spark sans être limité par la capacité de calcul des nœuds de votre cluster ACK. ECI crée dynamiquement des pods à la demande, ce qui permet de réduire les coûts de calcul. Cette rubrique décrit comment utiliser ECI pour planifier élastiquement des tâches Spark.

Contexte

Pour exploiter des fonctionnalités ECI plus avancées, définissez des annotations supplémentaires afin de configurer les paramètres ECI selon vos besoins. Pour plus d'informations, consultez la section Annotation de pod ECI.

Prérequis

  • Un cluster Spark a été créé dans la console EMR on ACK. Pour plus d'informations, consultez la section Prise en main d'EMR on ACK.

  • Le service Elastic Container Instance est activé. Pour plus d'informations, consultez la section Flux de travail.

Procédure

  1. Installez les nœuds virtuels requis par ECI dans votre cluster ACK. Pour plus d'informations, consultez la section Étape 1 : Déployer le composant ack-virtual-node dans un cluster ACK.

  2. Lors de la soumission d'une tâche Spark sur EMR on ACK, activez la planification ECI en configurant un libellé, une annotation ou Spark Conf.

    Pour plus d'informations sur la soumission d'une tâche Spark, consultez la section Soumettre une tâche Spark.

    Remarque

    Les exemples de cette rubrique utilisent Spark 3.1.1 (EMR-5.2.1-ack). Si vous utilisez une version différente, modifiez les configurations sparkVersion et mainApplicationFile. Pour une description des paramètres utilisés dans les exemples, consultez la documentation spark-on-k8s-operator.

    • Méthode 1 : Configurer un libellé de pod

      Définissez le libellé alibabacloud.com/eci sur true pour planifier l'exécution des pods spécifiés sur ECI. L'exemple suivant illustre cette configuration.

      apiVersion: "sparkoperator.k8s.io/v1beta2"
      kind: SparkApplication
      metadata:
        name: spark-pi-eci
      spec:
        type: Scala
        sparkVersion: 3.1.1
        mainClass: org.apache.spark.examples.SparkPi
        mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar"
        arguments:
          - "1000000"
        driver:
          cores: 2
          coreLimit: 2000m
          memory: 4g
        executor:
          cores: 4
          coreLimit: 4000m
          memory: 8g
          instances: 10
          # By configuring this label, all executors use ECI.
          labels:
            alibabacloud.com/eci: "true"
          # (Optional) Enable the ECI image cache to improve performance.
          annotations:
            k8s.aliyun.com/eci-image-cache: "true" 
    • Méthode 2 : Configurer une annotation de pod

      Définissez l'annotation alibabacloud.com/burst-resource sur eci pour planifier l'exécution des pods spécifiés sur ECI. Cette annotation accepte deux valeurs valides :

      • eci : Utiliser ECI lorsque les ressources des nœuds classiques du cluster sont insuffisantes.

      • eci_only : Utiliser uniquement ECI.

      L'exemple suivant illustre cette configuration.

      apiVersion: "sparkoperator.k8s.io/v1beta2"
      kind: SparkApplication
      metadata:
        name: spark-pi-eci
      spec:
        type: Scala
        sparkVersion: 3.1.1
        mainClass: org.apache.spark.examples.SparkPi
        mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar"
        arguments:
          - "1000000"
        driver:
          cores: 2
          coreLimit: 2000m
          memory: 4g
        executor:
          cores: 4
          coreLimit: 4000m
          memory: 8g
          instances: 10
          # By configuring this annotation, executors use ECI when regular node resources are insufficient.
          annotations:
            alibabacloud.com/burst-resource: "eci"
            # (Optional) Enable the ECI image cache to improve performance.
            k8s.aliyun.com/eci-image-cache: "true" 
    • Méthode 3 : Configurer Spark Conf

      Vous pouvez également activer la planification ECI en configurant des annotations de pod dans Spark Conf. Les valeurs des annotations sont identiques à celles de la Méthode 2 : Configurer une annotation de pod.

      1. Accédez à l'onglet spark-defaults.conf.

        1. Connectez-vous à la console EMR on ACK.

        2. Sur la page EMR on ACK, localisez le cluster cible et cliquez sur Configure dans la colonne Actions.

        3. Sur la page Configure, cliquez sur l'onglet spark-defaults.conf.

      2. Configurez le cluster Spark pour activer ECI.

        1. Cliquez sur Add Configuration Item.

        2. Dans la boîte de dialogue Add Configuration Item, ajoutez les éléments de configuration suivants.

          Parameter

          Description

          spark.kubernetes.driver.annotation.alibabacloud.com/burst-resource

          Indique si le pilote Spark utilise ECI. Valeurs valides : eci et eci_only.

          spark.kubernetes.driver.annotation.k8s.aliyun.com/eci-image-cache

          Indique si le pilote Spark utilise le cache d'images ECI. Définissez ce paramètre sur true pour améliorer les performances.

          spark.kubernetes.executor.annotation.alibabacloud.com/burst-resource

          Indique si les exécuteurs Spark utilisent ECI. Valeurs valides : eci et eci_only.

          spark.kubernetes.executor.annotation.k8s.aliyun.com/eci-image-cache

          Indique si les exécuteurs Spark utilisent le cache d'images ECI. Définissez ce paramètre sur true pour améliorer les performances.

          spark.kubernetes.driver.annotation.k8s.aliyun.com/eci-ram-role-name

          Spécifie le nom du rôle RAM à lier lors de la création du pod pilote Spark. Définissez cette valeur sur AliyunECSInstanceForEMRRole.

        3. Cliquez sur OK.

        4. Dans la boîte de dialogue qui s'affiche, saisissez un motif dans le champ Execution Reason et cliquez sur Save.

      3. Appliquez la configuration.

        1. Cliquez sur Deploy Client Configuration.

        2. Dans la boîte de dialogue qui s'affiche, saisissez un motif dans le champ Execution Reason et cliquez sur OK.

        3. Dans la boîte de dialogue Confirm, cliquez sur OK.

  3. Facultatif : Si votre tâche doit lire ou écrire des données dans OSS, ou utiliser les métadonnées DLF, accordez à ECI les autorisations nécessaires pour accéder à ces services cloud. Vous pouvez procéder de l'une des manières suivantes :

    • Méthode 1 : Attribuer un rôle RAM à ECI pour un accès sans mot de passe.

      1. Dans la console RAM, créez un rôle RAM dont l'entité de confiance est un service Alibaba Cloud. Pour plus d'informations, consultez la section Créer un rôle de service standard.

        Remarque

        Sélectionnez ECS comme service de confiance.

      2. Attachez les stratégies AliyunOSSFullAccess et AliyunDLFFullAccess au rôle RAM.

        Pour plus d'informations, consultez la section Gérer les autorisations d'un rôle RAM.

      3. Dans votre tâche Spark, ajoutez l'annotation suivante pour spécifier le rôle RAM.

        annotations:
          k8s.aliyun.com/eci-ram-role-name: <your-ram-role-name>
    • Méthode 2 : Configurer une AccessKey OSS ou une AccessKey DLF

      • Si votre tâche doit lire ou écrire des données dans OSS, ajoutez la configuration AccessKey à hadoopConf comme indiqué ci-dessous.

        hadoopConf:
          fs.jfs.cache.oss.accessKeyId: <yourAccessKeyId>
          fs.jfs.cache.oss.accessKeySecret: <yourAccessKeySecret>
      • Si votre tâche utilise DLF, ajoutez la configuration AccessKey à hadoopConf comme indiqué ci-dessous.

        hadoopConf:
          dlf.catalog.accessKeyId: <yourAccessKeyId>
          dlf.catalog.accessKeySecret: <yourAccessKeySecret>
          dlf.catalog.akMode: "MANUAL"