Freigeben über


Probleme mit einem pyspark Notebook beheben

Important

Die Big Data Cluster von Microsoft SQL Server 2019 werden eingestellt. Der Support für SQL Server 2019 Big Data Cluster endete am 28. Februar 2025. Weitere Informationen finden Sie im Ankündigungsblogbeitrag und den Big Data-Optionen auf der Microsoft SQL Server-Plattform.

In diesem Artikel wird die Problembehandlung für ein pyspark Notizbuch veranschaulicht, das fehlschlägt.

Architektur eines PySpark-Auftrags unter Azure Data Studio

Azure Data Studio kommuniziert mit dem livy Endpunkt in SQL Server Big Data Clustern.

Der livy Endpunkt gibt spark-submit Befehle im Big Data-Cluster aus. Jeder spark-submit Befehl verfügt über einen Parameter, der YARN als Clusterressourcen-Manager angibt.

Um Ihre PySpark-Sitzung effizient zu fehlerbeheben, sammeln und überprüfen Sie Protokolle auf jeder Ebene: Livy, YARN und Spark.

Für diese Schritte zur Problembehandlung ist erforderlich, dass Sie Folgendes haben:

  1. Azure Data CLI (azdata) installiert und korrekt für Ihren Cluster konfiguriert.
  2. Vertrautheit mit dem Ausführen von Linux-Befehlen und einigen Fähigkeiten zur Protokollbehandlung.

Troubleshooting steps

  1. Überprüfen Sie den Aufrufstapel und die Fehlermeldungen in der pyspark.

    Rufen Sie die Anwendungs-ID aus der ersten Zelle im Notizbuch ab. Verwenden Sie diese Anwendungs-ID, um die livy-, YARN- und Spark-Protokolle zu untersuchen. SparkContext verwendet diese YARN-Anwendungs-ID.

    Failed cell

  2. Holen Sie die Logdateien.

    Benutzen azdata bdc debug copy-logs zum Untersuchen

    Im folgenden Beispiel wird der Verbindungspunkt eines Big Data-Clusters verwendet, um die Protokolle zu kopieren. Aktualisieren Sie die folgenden Werte im Beispiel, bevor es ausgeführt wird.

    • <ip_address>: Big Data Cluster-Endpunkt
    • <username>: Ihr Benutzername des Big Data-Clusters
    • <namespace>: Der Kubernetes-Namespace für Ihren Cluster
    • <folder_to_copy_logs>: Der pfad des lokalen Ordners, in den Die Protokolle kopiert werden sollen
    azdata login --auth basic --username <username> --endpoint https://<ip_address>:30080
    azdata bdc debug copy-logs -n <namespace> -d <folder_to_copy_logs>
    

    Example output

    <user>@<server>:~$ azdata bdc debug copy-logs -n <namespace> -d copy_logs
    Collecting the logs for cluster '<namespace>'.
    Collecting logs for containers...
    Creating an archive from logs-tmp/<namespace>.
    Log files are archived in /home/<user>/copy_logs/debuglogs-<namespace>-YYYYMMDD-HHMMSS.tar.gz.
    Creating an archive from logs-tmp/dumps.
    Log files are archived in /home/<user>/copy_logs/debuglogs-<namespace>-YYYYMMDD-HHMMSS-dumps.tar.gz.
    Collecting the logs for cluster 'kube-system'.
    Collecting logs for containers...
    Creating an archive from logs-tmp/kube-system.
    Log files are archived in /home/<user>/copy_logs/debuglogs-kube-system-YYYYMMDD-HHMMSS.tar.gz.
    Creating an archive from logs-tmp/dumps.
    Log files are archived in /home/<user>/copy_logs/debuglogs-kube-system-YYYYMMDD-HHMMSS-dumps.tar.gz.
    
  3. Überprüfen Sie die Livy-Protokolle. Die Livy Protokolle befinden sich bei <namespace>\sparkhead-0\hadoop-livy-sparkhistory\supervisor\log.

    • Suchen Sie nach der YARN-Anwendungs-ID aus der ersten Zelle des Pyspark-Notizbuchs.
    • Suchen Sie nach dem ERR Status.

    Beispiel für Livy-Protokoll, das einen YARN ACCEPTED Zustand hat. Livy hat den Antrag für Garn eingereicht.

    HH:MM:SS INFO utils.LineBufferedStream: YYY-MM-DD HH:MM:SS INFO impl.YarnClientImpl: Submitted application application_<application_id>
    YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: YYY-MM-DD HH:MM:SS INFO yarn.Client: Application report for application_<application_id> (state: ACCEPTED)
    YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: YYY-MM-DD HH:MM:SS INFO yarn.Client: 
    YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream:      client token: N/A
    YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream:      diagnostics: N/A
    YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream:      ApplicationMaster host: N/A
    YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream:      ApplicationMaster RPC port: -1
    YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream:      queue: default
    YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream:      start time: ############
    YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream:      final status: UNDEFINED
    YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream:      tracking URL: https://sparkhead-1.fnbm.corp:8090/proxy/application_<application_id>/
    YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream:      user: <account>
    
  4. Überprüfen der YARN-Benutzeroberfläche

    Rufen Sie die YARN-Endpunkt-URL aus dem Azure Data Studio Big Data Cluster-Verwaltungsdashboard ab, oder führen Sie azdata bdc endpoint list –o table aus.

    For example:

    azdata bdc endpoint list -o table
    

    Returns

    Description                                             Endpoint                                                          Name                        Protocol
    ------------------------------------------------------  ----------------------------------------------------------------  --------------------------  ----------
    Gateway to access HDFS files, Spark                     https://knox.<namespace-value>.local:30443                               gateway                     https
    Spark Jobs Management and Monitoring Dashboard          https://knox.<namespace-value>.local:30443/gateway/default/sparkhistory  spark-history               https
    Spark Diagnostics and Monitoring Dashboard              https://knox.<namespace-value>.local:30443/gateway/default/yarn          yarn-ui                     https
    Application Proxy                                       https://proxy.<namespace-value>.local:30778                              app-proxy                   https
    Management Proxy                                        https://bdcmon.<namespace-value>.local:30777                             mgmtproxy                   https
    Log Search Dashboard                                    https://bdcmon.<namespace-value>.local:30777/kibana                      logsui                      https
    Metrics Dashboard                                       https://bdcmon.<namespace-value>.local:30777/grafana                     metricsui                   https
    Cluster Management Service                              https://bdcctl.<namespace-value>.local:30080                             controller                  https
    SQL Server Master Instance Front-End                    sqlmaster.<namespace-value>.local,31433                                  sql-server-master           tds
    SQL Server Master Readable Secondary Replicas           sqlsecondary.<namespace-value>.local,31436                               sql-server-master-readonly  tds
    HDFS File System Proxy                                  https://knox.<namespace-value>.local:30443/gateway/default/webhdfs/v1    webhdfs                     https
    Proxy for running Spark statements, jobs, applications  https://knox.<namespace-value>.local:30443/gateway/default/livy/v1       livy                        https
    
  5. Überprüfen Sie die Anwendungs-ID und einzelne application_master- und Containerprotokolle.

    Überprüfen der Anwendungs-ID

  6. Überprüfen Sie die YARN-Anwendungsprotokolle.

    Abrufen des Anwendungsprotokolls für die App. Verwenden Sie kubectl, um eine Verbindung mit dem sparkhead-0-Pod herzustellen, z. B.:

    kubectl exec -it sparkhead-0 -- /bin/bash
    

    Führen Sie dann diesen Befehl in der Shell mit dem richtigen application_id aus.

    yarn logs -applicationId application_<application_id>
    
  7. Suchen Sie nach Fehlern oder Stapeln.

    Beispiel für Berechtigungsfehler bei hdfs. Suchen Sie im Java-Stapel nach dem Caused by:

    YYYY-MM-DD HH:MM:SS,MMM ERROR spark.SparkContext: Error initializing SparkContext.
    org.apache.hadoop.security.AccessControlException: Permission denied: user=<account>, access=WRITE, inode="/system/spark-events":sph:<bdc-admin>:drwxr-xr-x
         at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:399)
         at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:255)
         at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:193)
         at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1852)
         at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1836)
         at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkAncestorAccess(FSDirectory.java:1795)
         at org.apache.hadoop.hdfs.server.namenode.FSDirWriteFileOp.resolvePathForStartFile(FSDirWriteFileOp.java:324)
         at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:2504)
         at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileChecked(FSNamesystem.java:2448)
    
    Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=<account>, access=WRITE, inode="/system/spark-events":sph:<bdc-admin>:drwxr-xr-x
    
  8. Überprüfen Sie die SPARK-Benutzeroberfläche.

    Spark UI

    Analysieren Sie die Aufgaben in den Phasen, um nach Fehlern zu suchen.

Next steps

Problembehandlung bei der Integration von SQL Server-Big Data-Clustern in Active Directory