Envoyer une charge de travail par lot Apache Spark

Découvrez comment envoyer une charge de travail par lot sur l'infrastructure de calcul gérée Google Cloud Serverless pour Apache Spark, qui adapte les ressources selon les besoins.

Avant de commencer

Configurez votre projet et, si nécessaire, attribuez des rôles Identity and Access Management.

Configurer votre projet

Effectuez une ou plusieurs des étapes suivantes, selon vos besoins :

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Dataproc API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. Accorder des rôles IAM si nécessaire

    Certains rôles IAM sont requis pour exécuter les exemples de cette page. En fonction des règles d'administration, ces rôles peuvent déjà avoir été attribués. Pour vérifier les attributions de rôles, consultez Devez-vous attribuer des rôles ?.

    Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

    Rôles utilisateur

    Pour obtenir les autorisations nécessaires pour envoyer une charge de travail par lot sans serveur, demandez à votre administrateur de vous accorder les rôles IAM suivants :

    Rôle du compte de service

    Pour vous assurer que le compte de service Compute Engine par défaut dispose des autorisations nécessaires pour envoyer une charge de travail par lot sans serveur, demandez à votre administrateur d'accorder au compte de service Compute Engine par défaut le rôle IAM Nœud de calcul Dataproc (roles/dataproc.worker) sur le projet.

    Envoyer une charge de travail par lot Spark

    Vous pouvez utiliser la console Google Cloud , la Google Cloud CLI ou l'API Dataproc pour créer et envoyer une charge de travail par lot Serverless pour Apache Spark.

    Console

    1. Dans la console Google Cloud , accédez à Lots Dataproc.

    2. Cliquez sur Créer.

    3. Envoyez une charge de travail par lot Spark qui calcule la valeur approximative de pi en sélectionnant et en remplissant les champs suivants :

      • Informations sur le lot :
        • ID du lot : spécifiez un ID pour votre charge de travail par lot. Cette valeur doit comporter entre 4 et 63 caractères en minuscules. Les caractères valides sont /[a-z][0-9]-/.
        • Région : sélectionnez une région dans laquelle votre charge de travail sera exécutée.
      • Conteneur :
        • Type de lot : Spark.
        • Version de l'environnement d'exécution : confirmez ou sélectionnez la version de l'environnement d'exécution 2.3.
        • Classe principale :
          org.apache.spark.examples.SparkPi
        • Fichiers JAR (ce fichier est préinstallé dans l'environnement d'exécution Spark de Serverless pour Apache Spark).
          file:///usr/lib/spark/examples/jars/spark-examples.jar
        • Arguments : 1 000.
      • Configuration de l'exécution : sélectionnez Compte de service. Par défaut, le lot s'exécute à l'aide du compte de service Compute Engine par défaut. Vous pouvez spécifier un compte de service personnalisé. Le compte de service par défaut ou personnalisé doit disposer du rôle de nœud de calcul Dataproc.
      • Configuration réseau : sélectionnez un sous-réseau dans la région de la session. Serverless pour Apache Spark active l'accès privé à Google sur le sous-réseau spécifié. Pour connaître les exigences en matière de connectivité réseau, consultez Configuration du réseauGoogle Cloud Serverless pour Apache Spark.
      • Propriétés : saisissez le Key (nom de la propriété) et le Value des propriétés Spark compatibles à définir sur votre charge de travail par lot Spark. Remarque : Contrairement aux propriétés de cluster de Dataproc sur Compute Engine, les propriétés de charge de travail Serverless pour Apache Spark n'incluent pas de préfixe spark:.
      • Autres options :
        • Vous pouvez configurer la charge de travail par lot pour qu'elle utilise un Hive Metastore externe autogéré.
        • Vous pouvez utiliser un serveur d'historique persistant (PHS). Le PHS doit se trouver dans la région où vous exécutez les charges de travail par lot.
    4. Cliquez sur Envoyer pour exécuter la charge de travail par lot Spark.

    gcloud

    Pour envoyer une charge de travail par lot Spark afin de calculer la valeur approximative de pi, exécutez la commande gcloud CLI gcloud dataproc batches submit spark en local dans une fenêtre de terminal ou dans Cloud Shell.

    gcloud dataproc batches submit spark \
        --region=REGION \
        --version=2.3 \
        --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
        --class=org.apache.spark.examples.SparkPi \
        -- 1000
    

    Remplacez l'élément suivant :

    • REGION: Spécifiez la région dans laquelle votre charge de travail sera exécutée.
    • Autres options : vous pouvez ajouter des indicateurs gcloud dataproc batches submit spark pour spécifier d'autres options de charge de travail et propriétés Spark.
      • --jars : L'exemple de fichier JAR est pré-installé dans l'environnement d'exécution Spark. L'argument de commande 1000 transmis à la charge de travail SparkPi spécifie 1 000 itérations de la logique d'estimation de pi (les arguments d'entrée de la charge de travail sont inclus après "-- ").
      • --subnet : Vous pouvez ajouter cet indicateur pour spécifier le nom d'un sous-réseau dans la région de la session. Si vous ne spécifiez pas de sous-réseau, Serverless pour Apache Spark sélectionne le sous-réseau default dans la région de la session. Serverless pour Apache Spark active l'accès privé à Google sur le sous-réseau. Pour connaître les exigences de connectivité réseau, consultez Configuration du réseauGoogle Cloud Serverless pour Apache Spark.
      • --properties : vous pouvez ajouter cet indicateur pour saisir les propriétés Spark compatibles que votre charge de travail par lot Spark doit utiliser.
      • --deps-bucket : vous pouvez ajouter cet indicateur pour spécifier un bucket Cloud Storage dans lequel Serverless pour Apache Spark importera les dépendances de la charge de travail. Le préfixe URI gs:// du bucket n'est pas obligatoire. Vous pouvez spécifier le chemin d'accès ou le nom du bucket. Serverless pour Apache Spark importe le ou les fichiers locaux dans un dossier /dependencies du bucket avant d'exécuter la charge de travail par lot. Remarque : Cet indicateur est obligatoire si votre charge de travail par lot fait référence à des fichiers sur votre machine locale.
      • --ttl : vous pouvez ajouter l'option --ttl pour spécifier la durée de vie du lot. Lorsque la charge de travail dépasse cette durée, elle est arrêtée sans condition, sans attendre la fin des tâches en cours. Spécifiez la durée à l'aide d'un suffixe s, m, h ou d (secondes, minutes, heures ou jours). La valeur minimale est de 10 minutes (10m) et la valeur maximale de 14 jours (14d).
        • Lots d'exécution 1.1 ou 2.0 : si --ttl n'est pas spécifié pour une charge de travail par lot d'exécution 1.1 ou 2.0, la charge de travail est autorisée à s'exécuter jusqu'à ce qu'elle se termine naturellement (ou indéfiniment si elle ne se termine pas).
        • Lots d'exécution 2.1 et versions ultérieures : si --ttl n'est pas spécifié pour une charge de travail par lot d'exécution 2.1 ou version ultérieure, la valeur par défaut est 4h.
      • --service-account : vous pouvez spécifier un compte de service à utiliser pour exécuter votre charge de travail. Si vous ne spécifiez pas de compte de service, la charge de travail s'exécute sous le compte de service Compute Engine par défaut. Votre compte de service doit disposer du rôle Nœud de calcul Dataproc.
      • Hive Metastore : la commande suivante configure une charge de travail par lot pour qu'elle utilise un métastore Hive autogéré externe à l'aide d'une configuration Spark standard.
        gcloud dataproc batches submit spark\
            --properties=spark.sql.catalogImplementation=hive,spark.hive.metastore.uris=METASTORE_URI,spark.hive.metastore.warehouse.dir=WAREHOUSE_DIR> \
            other args ...
                
      • Serveur d'historique persistant :
        1. La commande suivante crée un PHS sur un cluster Dataproc à nœud unique. Le PHS doit se trouver dans la région où vous exécutez les charges de travail par lot, et le bucket-name Cloud Storage doit exister.
          gcloud dataproc clusters create PHS_CLUSTER_NAME \
              --region=REGION \
              --single-node \
              --enable-component-gateway \
              --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/phs/*/spark-job-history
                       
        2. Envoyez une charge de travail par lot en spécifiant votre serveur d'historique persistant en cours d'exécution.
          gcloud dataproc batches submit spark \
              --region=REGION \
              --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
              --class=org.apache.spark.examples.SparkPi \
              --history-server-cluster=projects/project-id/regions/region/clusters/PHS-cluster-name \
              -- 1000
                        
      • Version de l'environnement d'exécution : Utilisez le flag --version pour spécifier la version de l'environnement d'exécution Serverless pour Apache Spark pour la charge de travail.
        gcloud dataproc batches submit spark \
            --region=REGION \
            --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
            --class=org.apache.spark.examples.SparkPi \
            --version=VERSION
            -- 1000
                    

    API

    Cette section explique comment créer une charge de travail par lot pour calculer la valeur approximative de pi à l'aide de batches.create Serverless pour Apache Spark.

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • project-id : ID de projet Google Cloud .
    • region : région Compute Engine dans laquelle Google Cloud Serverless pour Apache Spark exécutera la charge de travail.
    • Remarques :

      • PROJECT_ID : ID de votre projet Google Cloud . Les ID de projet sont listés dans la section Informations sur le projet du tableau de bord de la console Google Cloud .
      • REGION : région de la session.

    Méthode HTTP et URL :

    POST https://dataproc.googleapis.com/v1/projects/project-id/locations/region/batches

    Corps JSON de la requête :

    {
      "sparkBatch":{
        "args":[
          "1000"
        ],
        "runtimeConfig": {
          "version": "2.3",
        },
        "jarFileUris":[
          "file:///usr/lib/spark/examples/jars/spark-examples.jar"
        ],
        "mainClass":"org.apache.spark.examples.SparkPi"
      }
    }
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    Vous devriez recevoir une réponse JSON de ce type :

    {
    "name":"projects/project-id/locations/region/batches/batch-id",
      "uuid":",uuid",
      "createTime":"2021-07-22T17:03:46.393957Z",
      "sparkBatch":{
        "mainClass":"org.apache.spark.examples.SparkPi",
        "args":[
          "1000"
        ],
        "jarFileUris":[
          "file:///usr/lib/spark/examples/jars/spark-examples.jar"
        ]
      },
      "runtimeInfo":{
        "outputUri":"gs://dataproc-.../driveroutput"
      },
      "state":"SUCCEEDED",
      "stateTime":"2021-07-22T17:06:30.301789Z",
      "creator":"account-email-address",
      "runtimeConfig":{
        "version":"2.3",
        "properties":{
          "spark:spark.executor.instances":"2",
          "spark:spark.driver.cores":"2",
          "spark:spark.executor.cores":"2",
          "spark:spark.app.name":"projects/project-id/locations/region/batches/batch-id"
        }
      },
      "environmentConfig":{
        "peripheralsConfig":{
          "sparkHistoryServerConfig":{
          }
        }
      },
      "operation":"projects/project-id/regions/region/operation-id"
    }
    

    Estimer les coûts des charges de travail

    Les charges de travail Serverless pour Apache Spark consomment des ressources de stockage aléatoire et des unités de calcul de données (DCU). Pour obtenir un exemple qui génère des UsageMetrics Dataproc afin d'estimer la consommation de ressources et les coûts des charges de travail, consultez la page Tarifs de Serverless pour Apache Spark.

    Étapes suivantes

    Apprenez-en davantage sur les points suivants :