Référence Snowpark Submit

Avec Snowpark Submit, vous pouvez utiliser la sémantique Spark habituelle pour exécuter des charges de travail Spark non interactives et orientées par lots sur Snowflake.

Note

snowpark-submit prend en charge une grande partie des mêmes fonctionnalités que spark-submit. Cependant, certaines fonctionnalités ont été omises, car elles ne sont pas nécessaires lors de l’exécution de charges de travail Spark sur Snowflake.

Syntaxe

snowpark-submit
  --name <application_name>
  --exclude-packages <package_to_exclude> [, <package_to_exclude>, ...]
  --py-files <files_to_place_on_path>
  --conf <spark_config_property=value> [<spark_config_property=value> ...]
  --properties-file <path_to_properies_file>
  --help, -h
  --verbose, -v
  --version
  --account <snowflake_account>
  --user <snowflake_user>
  --authenticator <snowflake_authenticator>
  --token-file-path <snowflake_token_file_path>
  --password <snowflake_password>
  --role <snowflake_role>
  --host <snowflake_host>
  --database <snowflake_database_name>
  --schema <snowflake_schema_name>
  --warehouse <snowflake_warehouse_name>
  --compute-pool <snowflake_compute_pool>
  --comment <comment>
  --snowflake-stage <snowflake_stage>
  --external-access-integrations <snowflake_external_access_integrations> [, ...]
  --snowflake-log-level <snowflake_log_level>
  --snowflake-workload-name <snowflake_workload_name>
  --snowflake-connection-name <snowflake_connection_name>
  --workload-status
  --display-logs
  --wait-for-completion
  <application.jar | application.py> [<application_arguments>]
Copy

Arguments

application.jar | application.py

Chemin d’accès à un fichier contenant l’application et les dépendances.

[application arguments]

Arguments spécifiques à l’application transmis à la méthode principale de l’application.

Options

--name NAME

Un nom de votre application.

--exclude-packages [EXCLUDE_PACKAGES ...]

Liste de paires groupId:artifactId, séparées par des virgules, à exclure lors de la résolution des dépendances fournies dans --packages pour éviter les conflits de dépendance.

--py-files PY_FILES

Liste de fichiers .zip, .egg ou .py, séparés par des virgules, à placer sur le PYTHONPATH pour les applications Python.

--conf [PROP=VALUEPROP=VALUE ...]

Propriété de configuration arbitraire Spark.

--properties-file FILE

Chemin d’accès à un fichier à partir duquel charger des propriétés supplémentaires. S’il n’est pas spécifié, conf/spark-defaults.conf sera recherché.

--help, -h

Afficher le message d’aide et quitter.

--verbose, -v

Imprimer une sortie de débogage supplémentaire.

--version

Imprimer la version actuelle de Spark.

Options spécifiques à Snowflake

--account SNOWFLAKE_ACCOUNT

Compte Snowflake à utiliser. Remplace le compte dans le fichier connections.toml si spécifié.

--user SNOWFLAKE_USER

Utilisateur Snowflake à utiliser. Remplace l’utilisateur dans le fichier connections.toml si spécifié.

--authenticator SNOWFLAKE_AUTHENTICATOR

Authentificateur pour la connexion Snowflake Remplace l’authentificateur dans le fichier connections.toml si spécifié. S’il n’est pas spécifié, devient par défaut l’authentificateur de mot de passe utilisateur.

--token-file-path SNOWFLAKE_TOKEN_FILE_PATH

Chemin d’accès à un fichier contenant le jeton OAuth pour Snowflake. Remplace le chemin d’accès au fichier de jetons dans le fichier connections.toml si spécifié.

--password SNOWFLAKE_PASSWORD

Mot de passe de l’utilisateur Snowflake. Remplace le mot de passe dans le fichier connections.toml si spécifié.

--role SNOWFLAKE_ROLE

Rôle Snowflake à utiliser. Remplace le rôle dans le fichier connections.toml si spécifié.

--host SNOWFLAKE_HOST

Hôte pour le déploiement de Snowflake. Remplace l’hôte dans le fichier connections.toml si spécifié.

--database SNOWFLAKE_DATABASE_NAME

Base de données Snowflake à utiliser dans la session. Remplace la base de données dans le fichier connections.toml si spécifié.

--schema SNOWFLAKE_SCHEMA_NAME

Schéma Snowflake à utiliser dans la session. Remplace le schéma dans le fichier connections.toml si spécifié.

--warehouse SNOWFLAKE_WAREHOUSE_NAME

Entrepôt Snowflake à utiliser dans la session. Remplace l’entrepôt dans le fichier connections.toml si spécifié.

--compute-pool SNOWFLAKE_COMPUTE_POOL

Pool de calcul Snowflake pour l’exécution de la charge de travail fournie. Remplace le pool de calcul dans le fichier connections.toml si spécifié.

--comment COMMENT

Un message associé à la charge de travail. Peut être utilisé pour identifier la charge de travail dans Snowflake.

--snowflake-stage SNOWFLAKE_STAGE

Zone de préparation Snowflake où les fichiers de charge de travail sont importés.

--external-access-integrations [SNOWFLAKE_EXTERNAL_ACCESS_INTEGRATIONS ...]

Intégrations d’accès externes Snowflake requises par la charge de travail.

--snowflake-log-level SNOWFLAKE_LOG_LEVEL

Niveau de journalisation pour la table d’événements Snowflake ('INFO', 'ERROR', 'NONE'). (Par défaut : INFO).

--snowflake-workload-name SNOWFLAKE_WORKLOAD_NAME

Nom de la charge de travail à exécuter dans Snowflake.

--snowflake-connection-name SNOWFLAKE_CONNECTION_NAME

Nom de la connexion dans le fichier connections.toml à utiliser comme configuration de base. Les arguments de ligne de commande remplaceront toutes les valeurs du fichier connections.toml.

--workload-status

Imprimer le statut détaillé de la charge de travail.

--display-logs

S’il faut imprimer les journaux d’application dans la console lorsque --workload-status est spécifié.

--wait-for-completion

En mode cluster, lorsque spécifié, exécutez la charge de travail en mode bloquant et et attendez qu’elle soit terminée.

--requirements-file REQUIREMENTS_FILE

Chemin d’accès à un fichier requirements.txt contenant les dépendances du paquet Python à installer avant d’exécuter la charge de travail. Nécessite une intégration d’accès externe pour PyPI.

--wheel-files WHEEL_FILES

Liste de fichiers .whl, séparés par des virgules, à installer avant d’exécuter la charge de travail Python. Utilisé pour les dépendances privées non disponibles sur PyPI.

Exemples d’options communes

Déploiement d’application

Snowpark Container Services de Snowflake (SPCS) est l’infrastructure principale pour l’exécution de vos applications Spark. Vous devez avoir créé un pool de calcul SPCS au préalable.

Application Python de base

Pour déployer une application Python de base en mode cluster :

snowpark-submit \
  --snowflake-workload-name MY_PYTHON_JOB \
  --snowflake-connection-name MY_CONNECTION_CONFIG_NAME
  app.py arg1 arg2
Copy

Authentification

Snowpark Submit propose diverses méthodes pour s’authentifier auprès de Snowflake. Vous devez utiliser au moins une méthode. Le profil de connexion et l’authentification directe peuvent être utilisés ensemble ou séparément. L’option de ligne de commande remplace les champs correspondants dans le profil de connexion lorsqu’elle est également présente.

Profil de connexion

Pour utiliser un profil de connexion Snowflake préconfiguré :

snowpark-submit \
  --snowflake-connection-name my_connection \
  --snowflake-workload-name MY_JOB \
  app.py
Copy

Authentification directe

Nom d’utilisateur et mot de passe

Pour fournir des détails d’authentification directement dans la commande :

snowpark-submit \
  --host myhost \
  --account myaccount \
  --user myuser \
  --password mypassword \
  --role myrole \
  --snowflake-workload-name MY_JOB \
  app.py
Copy

OAuth

Pour s’authentifier à l’aide d’un jeton OAuth :

snowpark-submit \
  --host myhost \
  --account myaccount \
  --authenticator oauth \
  --token-file-path /path/to/token.txt \
  --snowflake-workload-name MY_JOB \
  --compute-pool MY_COMPUTE_POOL \
  app.py
Copy

Ressources Snowflake

Pour spécifier la base de données, le schéma, l’entrepôt et le pool de calcul Snowflake pour votre tâche :

snowpark-submit \
  --database MY_DB \
  --schema MY_SCHEMA \
  --warehouse MY_WH \
  --snowflake-workload-name MY_JOB \
  --snowflake-connection-name MY_CONNECTION \
  app.py
Copy

Zones de préparation Snowflake

Vous pouvez utiliser Snowpark Submit pour stocker des fichiers et y accéder directement sur une zone de préparation Snowflake.

Pour soumettre une tâche à l’aide d’un fichier sur une zone de préparation Snowflake :

snowpark-submit \
  --snowflake-stage @my_stage \
  --snowflake-workload-name MY_JOB \
  --snowflake-connection-name MY_CONNECTION \
  @my_stage/app.py
Copy

Gestion des dépendances

Vous pouvez gérer les dépendances de votre application.

Dépendances Python

Pour spécifier des fichiers ou des archives Python supplémentaires qui sont nécessaires à votre application :

snowpark-submit \
  --py-files dependencies.zip,module.py \
  --snowflake-workload-name MY_PYTHON_JOB \
  --snowflake-connection-name MY_CONNECTION \
  app.py
Copy

Surveillance et contrôle

Vous pouvez surveiller et contrôler vos tâches Snowpark Submit de manière efficace.

En attente de l’achèvement de la tâche

Par défaut, Snowpark Submit lance la tâche et renvoie immédiatement. Pour exécuter en mode bloquant et attendre la fin de la tâche :

snowpark-submit \
  --snowflake-connection-name my_connection \
  --snowflake-workload-name MY_JOB \
  --wait-for-completion \
  app.py
Copy

L’indicateur wait-for-completion provoque le blocage de la commande jusqu’à ce que la tâche soit terminée (avec succès ou en cas d’échec), affichant des mises à jour périodiques du statut. Cela est utile pour les workflows où vous devez vous assurer qu’une tâche est terminée avant de poursuivre avec d’autres tâches, comme lorsque vous utilisez Apache Airflow.

Vérification du statut de la charge de travail

Vérifiez le statut d’une charge de travail (en cours d’exécution ou terminée).

snowpark-submit --snowflake-connection-name my_connection --snowflake-workload-name MY_JOB --workload-status
Copy

Cette commande renvoie les informations suivantes à propos de la charge de travail :

  • État actuel (DEPLOYING, RUNNING, SUCCEEDED, FAILED)

  • Heure de début et durée

  • Informations sur le service

Affichage des journaux d’application

Pour consulter les journaux détaillés ainsi que le statut de la charge de travail :

snowpark-submit --snowflake-connection-name my_connection --snowflake-workload-name MY_JOB --workload-status --display-logs
Copy

L’indicateur display-logs récupérera et imprimera les journaux de sortie de l’application dans la console. Grâce à ces journaux, vous pouvez effectuer les tâches suivantes :

  • Déboguer les erreurs de l’application

  • Surveiller la progression de l’exécution

  • Consulter la sortie de l’application

Note

Il existe un léger délai (de quelques secondes à une minute) avant que les journaux soient prêts à être récupérés. Lorsqu’une table d’événements n’est pas utilisée pour stocker les données des journaux, les journaux sont conservés pendant une courte période, par exemple cinq minutes ou moins.

Configuration avancée

Réglez vos tâches Snowpark Submit avec des configurations avancées.

Intégration de l’accès externe

Connectez-vous aux services externes à partir de votre application Spark :

snowpark-submit \
  --external-access-integrations "MY_NETWORK_RULE,MY_STORAGE_INTEGRATION" \
  --snowflake-workload-name MY_JOB \
  --snowflake-connection-name my_connection \
  app.py
Copy

Configuration du niveau de journalisation

Contrôlez le niveau de journalisation de votre application dans la table d’événements Snowflake :

snowpark-submit \
  --snowflake-log-level INFO \
  --snowflake-workload-name MY_JOB \
  --snowflake-connection-name MY_CONNECTION \
  app.py
Copy

Options relatives au niveau de journalisation Snwoflake (snowflake-log-level) : INFO, ERROR, NONE.

Ajout d’un contexte de tâche

Ajoutez un commentaire descriptif pour faciliter l’identification de la charge de travail dans Snowflake :

snowpark-submit \
  --comment "Daily data processing job" \
  --snowflake-workload-name MY_JOB \
  --snowflake-connection-name my_connection \
  app.py
Copy