Freigeben über


Übermitteln von Spark-Aufträgen mithilfe von Befehlszeilentools

Gilt für: SQL Server 2019 (15.x)

Dieser Artikel enthält Anleitungen zur Verwendung von Befehlszeilentools zum Ausführen von Spark-Aufträgen auf SQL Server-Big Data-Cluster.

Wichtig

Das Microsoft SQL Server 2019-Big Data-Cluster-Add-On wird eingestellt. Der Support für SQL Server 2019-Big Data-Clusters endet am 28. Februar 2025. Alle vorhandenen Benutzer*innen von SQL Server 2019 mit Software Assurance werden auf der Plattform vollständig unterstützt, und die Software wird bis zu diesem Zeitpunkt weiterhin über kumulative SQL Server-Updates verwaltet. Weitere Informationen finden Sie im Ankündigungsblogbeitrag und unter Big Data-Optionen auf der Microsoft SQL Server-Plattform.

Voraussetzungen

Spark-Aufträge, die azdata oder Livy verwenden

Dieser Artikel enthält Beispiele für die Verwendung von Befehlszeilenmustern zum Übermitteln von Spark-Anwendungen an SQL Server-Big Data-Cluster.

Mit den azdata bdc sparkBefehlen der Azure Data-CLI können alle Funktionen von Spark-SQL Server-Big Data-Cluster in der Befehlszeile ausgeführt werden. Dieser Artikel konzentriert sich auf die Auftragsübermittlung. Aber auch azdata bdc spark unterstützt über den Befehl azdata bdc spark sessioninteraktive Modi für Python, Scala, SQL und R.

Wenn Sie direkte Integration in eine REST-API benötigen, verwenden Sie standardmäßige Livy-Aufrufe zum Übermitteln von Aufträgen. In diesem Artikel wird das Befehlszeilentool curlin den Livy-Beispielen verwendet, um den REST-API-Aufruf auszuführen. Ein detailliertes Beispiel für die Interaktion mit dem Spark Livy-Endpunkt mithilfe von Python-Code finden Sie auf GitHub unter Using Spark from the Livy endpoint (Verwenden von Spark vom Livy-Endpunkt aus).

Einfaches ETL, bei dem Spark für Big Data-Cluster verwendet wird

Diese ETL-Anwendung (Extrahieren, Transformieren und Laden) folgt einem häufigen Datentechnikmuster. Sie lädt Tabellendaten aus einem Zielzonenpfad von Apache Hadoop Distributed File System (HDFS). Anschließend verwendet sie ein Tabellenformat, um in einen von HDFS verarbeiteten Zonenpfad zu schreiben.

Laden Sie das Dataset für die Beispielanwendung herunter. Erstellen Sie dann PySpark-Anwendungen mithilfe von PySpark, Spark Scala oder Spark SQL.

In den folgenden Abschnitten finden Sie Beispielübungen für die einzelnen Lösungen. Wählen Sie die Registerkarte für Ihre Plattform aus. Sie werden die Anwendung mithilfe von azdata oder curl ausführen.

In diesem Beispiel wird die folgende PySpark-Anwendung verwendet. Sie wird auf dem lokalen Computer als die Python-Datei parquet_etl_sample.py gespeichert.

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")

Kopieren der PySpark-Anwendung in HDFS

Speichern Sie die Anwendung in HDFS, damit der Cluster zur Ausführung darauf zugreifen kann. Als bewährte Methode sollten Sie Anwendungsspeicherorte innerhalb des Clusters standardisieren und steuern, um die Verwaltung zu vereinfachen.

In diesem Beispiel für einen Anwendungsfall werden alle ETL-Pipelineanwendungen im Pfad hdfs:/apps/ETL-Pipelines gespeichert. Die Beispielanwendung wird unter hdfs:/apps/ETL-Pipelines/parquet_etl_sample.py gespeichert.

Führen Sie den folgenden Befehl aus, um parquet_etl_sample.py vom lokalen Entwicklungs- oder Stagingcomputer in den HDFS-Cluster hochzuladen.

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

Ausführen der Spark-Anwendung

Verwenden Sie den folgenden Befehl, um die Anwendung zur Ausführung an Spark-SQL Server-Big Data-Cluster zu übermitteln.

Der Befehl azdata führt die Anwendung mithilfe von häufig angegebenen Parametern aus. Umfassende Parameteroptionen für azdata bdc spark batch create finden Sie unter azdata bdc spark.

Für diese Anwendung ist der Konfigurationsparameter spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation erforderlich. Deshalb wird im Befehl die Option --config verwendet. Dieses Setup zeigt, wie Konfigurationen in die Spark-Sitzung übergeben werden.

Sie können mithilfe der Option --config mehrere Konfigurationsparameter angeben. Sie könnten sie auch im Rahmen der Anwendungssitzung angeben, indem Sie die Konfiguration im Objekt SparkSession festlegen.

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

Warnung

Der Parameter „name“ oder „n“ für den Batchnamen muss bei jeder Erstellung eines neuen Batches eindeutig sein.

Überwachen von Spark-Aufträgen

Die azdata bdc spark batch-Befehle bieten Verwaltungsaktionen für Spark-Batchaufträge.

Führen Sie den folgenden Befehl aus, um alle gerade ausgeführten Aufträge aufzulisten.

  • Mit dem Befehl azdata:

    azdata bdc spark batch list -o table
    
  • Der Befehl curl, mit Livy:

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

Führen Sie zum Abrufen von Informationen für einen Spark-Batch mit der angegebenen ID den folgenden Befehl aus. Die batch id wird aus spark batch create zurückgegeben.

  • Mit dem Befehl azdata:

    azdata bdc spark batch info --batch-id 0
    
  • Der Befehl curl, mit Livy:

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

Führen Sie zum Abrufen von Statusinformationen für einen Spark-Batch mit der angegebenen ID den folgenden Befehl aus.

  • Mit dem Befehl azdata:

    azdata bdc spark batch state --batch-id 0
    
  • Der Befehl curl, mit Livy:

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

Führen Sie zum Abrufen der Protokolle für einen Spark-Batch mit der angegebenen ID den folgenden Befehl aus.

  • Mit dem Befehl azdata:

    azdata bdc spark batch log --batch-id 0
    
  • Der Befehl curl, mit Livy:

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

Nächste Schritte

Informationen zur Problembehandlung bei Spark-Code finden Sie unter Problembehandlung für ein PySpark-Notebook.

Umfassenden Spark-Beispielcode finden Sie auf GitHub unter SQL Server Big Data Clusters Spark samples (Beispiele für Spark-SQL Server-Big Data-Cluster).

Weitere Informationen zu SQL Server-Big Data-Cluster und zugehörige Szenarios finden Sie unter Big Data-Cluster für SQL Server.