Exécuter une charge de travail par lot Apache Spark

Découvrez comment utiliser Serverless pour Apache Spark afin d'envoyer une charge de travail par lot sur une infrastructure de calcul gérée par Dataproc, qui ajuste les ressources selon les besoins.

Avant de commencer

  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.

    Go to project selector

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

  4. Enable the Dataproc API.

    Enable the API

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

    Go to project selector

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

  7. Enable the Dataproc API.

    Enable the API

  8. Envoyer une charge de travail par lot Spark

    Vous pouvez utiliser la console Google Cloud , la Google Cloud CLI ou l'API Serverless pour Apache Spark afin de créer et d'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 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 :
        • Batch type (Type de lot) : Spark.
        • Version de l'environnement d'exécution : la version par défaut de l'environnement d'exécution est sélectionnée. Vous pouvez éventuellement spécifier une version d'exécution Serverless pour Apache Spark autre que celle par défaut.
        • 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 : 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.
      • 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 sans serveur 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 dataproc batches submit spark de la gcloud CLI en local dans une fenêtre de terminal ou dans Cloud Shell.

    gcloud dataproc batches submit spark \
        --region=REGION \
        --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.
      • --version : Vous pouvez spécifier une version d'exécution sans serveur pour Apache Spark autre que celle par défaut.
      • --jars : Le fichier JAR d'exemple 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 en matière de connectivité réseau, consultez Configuration du réseauGoogle Cloud sans serveur 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 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 ordinateur local.
      • --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 de 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 serveur d'historique persistant 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 le 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 du runtime : Utilisez l'indicateur --version pour spécifier la version du runtime 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 Serverless pour Apache Spark exécutera la charge de travail. Google Cloud
    • 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"
        ],
        "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 Shuffle 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 Tarifs de l'infrastructure sans serveur pour Apache Spark.

    Étapes suivantes

    Apprenez-en davantage sur les points suivants :