Share via


Soumettre des travaux Spark à l’aide d’outils de ligne de commande

S’applique à : SQL Server 2019 (15.x)

Cet article fournit des conseils sur l’utilisation des outils de ligne de commande pour exécuter des travaux Spark sur Clusters Big Data SQL Server.

Important

Le module complémentaire Clusters Big Data Microsoft SQL Server 2019 sera mis hors service. La prise en charge de la plateforme Clusters Big Data Microsoft SQL Server 2019 se terminera le 28 février 2025. Tous les utilisateurs existants de SQL Server 2019 avec Software Assurance seront entièrement pris en charge sur la plateforme, et le logiciel continuera à être maintenu par les mises à jour cumulatives SQL Server jusqu’à ce moment-là. Pour plus d’informations, consultez le billet de blog d’annonce et les Options Big Data sur la plateforme Microsoft SQL Server.

Prérequis

Travaux Spark qui utilisent azdata ou Livy

Cet article fournit des exemples d’utilisation de modèles de ligne de commande pour soumettre des applications Spark à Clusters Big Data SQL Server.

Les commandes azdata bdc spark d’Azure Data CLI exposent toutes les fonctionnalités de Clusters Big Data SQL Server Spark sur la ligne de commande. Cet article se concentre sur la soumission des travaux. azdata bdc spark prend également en charge les modes interactifs pour Python, Scala, SQL et R avec la commande azdata bdc spark session.

Si vous avez besoin d’une intégration directe à une API REST, utilisez des appels Livy standard pour soumettre des travaux. Dans cet article, nous utilisons l’outil en ligne de commande curl dans les exemples Livy pour exécuter l’appel d’API REST. Pour obtenir un exemple détaillé expliquant comment interagir avec le point de terminaison Spark Livy à l’aide de code Python, consultez « Use Spark from the Livy endpoint » (Utilisation de Spark à partir du point de terminaison Livy) sur GitHub.

ETL simple qui utilise Clusters Big Data Spark

Cette application d’extraction, de transformation et de chargement (ETL) suit un modèle commun d’engineering données. Elle charge les données tabulaires à partir d’un chemin de zone d’atterrissage d’Apache Hadoop Distributed File System (HDFS). Elle utilise ensuite un format de table pour écrire dans un chemin de zone traité par HDFS.

Téléchargez le jeu de données de l’exemple d’application. Créez ensuite des applications PySpark à l’aide de PySpark, Spark Scala ou Spark SQL.

Dans les sections suivantes, vous trouverez des exemples d’exercices pour chaque solution. Sélectionnez l’onglet correspondant à votre plateforme. Vous exécuterez l’application à l’aide de azdata ou de curl.

Cet exemple utilise l’application PySpark suivante. Il est enregistré sous la forme d’un fichier Python nommé parquet_etl_sample.py sur l’ordinateur local.

from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

# Read clickstream_data from storage pool HDFS into a Spark data frame. Applies column renames.
df = spark.read.option("inferSchema", "true").csv('/securelake/landing/criteo/test.txt', sep='\t', 
    header=False).toDF("feat1","feat2","feat3","feat4","feat5","feat6","feat7","feat8",
    "feat9","feat10","feat11","feat12","feat13","catfeat1","catfeat2","catfeat3","catfeat4",
    "catfeat5","catfeat6","catfeat7","catfeat8","catfeat9","catfeat10","catfeat11","catfeat12",
    "catfeat13","catfeat14","catfeat15","catfeat16","catfeat17","catfeat18","catfeat19",
    "catfeat20","catfeat21","catfeat22","catfeat23","catfeat24","catfeat25","catfeat26")

# Print the data frame inferred schema
df.printSchema()

tot_rows = df.count()
print("Number of rows:", tot_rows)

# Drop the managed table
spark.sql("DROP TABLE dl_clickstream")

# Write data frame to HDFS managed table by using optimized Delta Lake table format
df.write.format("parquet").mode("overwrite").saveAsTable("dl_clickstream")

print("Sample ETL pipeline completed")

Copier l’application PySpark dans HDFS

Stockez l’application dans HDFS pour que le cluster puisse y accéder en vue de son exécution. Comme meilleure pratique, nous vous recommandons de normaliser et de régir les emplacements d’application au sein du cluster afin de simplifier l’administration.

Dans cet exemple de cas d’usage, toutes les applications du pipeline ETL sont stockées dans le chemin hdfs:/apps/ETL-Pipelines. L’exemple d’application est stocké dans hdfs:/apps/ETL-Pipelines/parquet_etl_sample.py.

Exécutez la commande suivante pour charger le parquet_etl_sample.py à partir de la machine de développement ou intermédiaire locale vers le cluster HDFS.

azdata bdc hdfs cp --from-path parquet_etl_sample.py  --to-path "hdfs:/apps/ETL-Pipelines/parquet_etl_sample.py"

Exécuter l’application Spark

Utilisez la commande suivante pour envoyer l’application à Clusters Big Data SQL Server Spark à des fins d’exécution.

La commande azdata exécute l’application à l’aide de paramètres couramment spécifiés. Pour connaître toutes les options de paramètre pour azdata bdc spark batch create, consultez azdata bdc spark.

Cette application requiert le paramètre de configuration spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation. La commande utilise donc l’option --config. Cette installation montre comment transmettre des configurations dans la session Spark.

Vous pouvez utiliser l’option --config pour spécifier plusieurs paramètres de configuration. Vous pouvez également les spécifier dans la session d’application en définissant la configuration dans l’objet SparkSession.

azdata bdc spark batch create -f hdfs:/apps/ETL-Pipelines/parquet_etl_sample.py \
--config '{"spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation":"true"}' \
-n MyETLPipelinePySpark --executor-count 2 --executor-cores 2 --executor-memory 1664m

Avertissement

Le paramètre « name » ou « n » pour le nom du lot doit être unique à chaque fois qu’un lot est créé.

Superviser les travaux Spark

Les commandes azdata bdc spark batch contiennent des actions de gestion pour les travaux de traitement par lots Spark.

Pour répertorier tous les travaux en cours d’exécution, exécutez la commande suivante.

  • La commande azdata :

    azdata bdc spark batch list -o table
    
  • Commande curl avec Livy :

    curl -k -u <USER>:<PASSWORD> -X POST <LIVY_ENDPOINT>/batches
    

Pour obtenir des informations concernant un lot Spark avec l’ID donné, exécutez la commande suivante. batch id est retourné par spark batch create.

  • La commande azdata :

    azdata bdc spark batch info --batch-id 0
    
  • Commande curl avec Livy :

    curl -k -u <USER>:<PASSWORD> -X POST <LIVY_ENDPOINT>/batches/<BATCH_ID>
    

Pour obtenir des informations d’état concernant un lot Spark avec l’ID donné, exécutez la commande suivante.

  • La commande azdata :

    azdata bdc spark batch state --batch-id 0
    
  • Commande curl avec Livy :

    curl -k -u <USER>:<PASSWORD> -X POST <LIVY_ENDPOINT>/batches/<BATCH_ID>/state
    

Pour obtenir des journaux d’activité pour un lot Spark avec l’ID donné, exécutez la commande suivante.

  • La commande azdata :

    azdata bdc spark batch log --batch-id 0
    
  • Commande curl avec Livy :

    curl -k -u <USER>:<PASSWORD> -X POST <LIVY_ENDPOINT>/batches/<BATCH_ID>/log
    

Étapes suivantes

Pour plus d’informations sur le dépannage du code Spark, consultez Résoudre les problèmes d’un notebook PySpark.

Un exemple de code Spark complet est disponible dans Exemples Clusters Big Data SQL Server Spark sur GitHub.

Pour plus d’informations sur Clusters Big Data SQL Server et les scénarios associés, consultez Clusters Big Data SQL Server.