共用方式為


筆記本故障排除pyspark

這很重要

Microsoft SQL Server 2019 巨量資料叢集附加元件將會淘汰。 SQL Server 2019 巨量資料叢集的支援將於 2025 年 2 月 28 日結束。 平台上將完全支援含軟體保證 SQL Server 2019 的所有現有使用者,而且軟體將會持續透過 SQL Server 累積更新來維護,直到該時間為止。 如需詳細資訊,請參閱公告部落格文章Microsoft SQL Server 平台上的巨量資料選項

本文示範如何對出現故障的 pyspark 筆記本進行故障排除。

Azure Data Studio 下 PySpark 作業的架構

Azure Data Studio 會與 livy SQL Server 巨量數據叢集上的端點通訊。

端點會在 livy 巨量數據叢集中發出 spark-submit 命令。 每個 spark-submit 命令都有參數,指定 YARN 作為叢集資源管理員。

若要有效率地針對 PySpark 會話進行疑難解答,您將收集並檢閱每一層內的記錄:Livy、YARN 和 Spark。

此疑難解答步驟需要您具備:

  1. Azure Data CLI (azdata) 已安裝且設定正確設定為叢集。
  2. 熟悉執行Linux命令和一些記錄疑難解答技能。

疑難排解步驟

  1. 請檢閱pyspark中的堆疊和錯誤訊息。

    從工作簿中的第一個儲存格取得應用程式 ID。 使用此應用程式標識碼來調查 livy、YARN 和 Spark 記錄。 SparkContext 會使用此 YARN 應用程式識別碼。

    失敗的儲存格

  2. 取得日誌。

    使用 azdata bdc debug copy-logs 來調查

    下列範例會連線巨量數據叢集端點來複製記錄。 在執行之前,請先更新範例中的下列值。

    • <ip_address>:巨量數據叢集端點
    • <username>:巨量數據叢集用戶名稱
    • <namespace>:叢集的 Kubernetes 命名空間
    • <folder_to_copy_logs>:您要將記錄複製到其中的本機資料夾路徑
    azdata login --auth basic --username <username> --endpoint https://<ip_address>:30080
    azdata bdc debug copy-logs -n <namespace> -d <folder_to_copy_logs>
    

    範例輸出

    <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. 檢閱 Livy 記錄。 Livy 記錄位於 <namespace>\sparkhead-0\hadoop-livy-sparkhistory\supervisor\log

    • 從 pyspark 筆記本的第一個單元格搜尋 YARN 應用程式識別碼。
    • 搜尋 ERR 狀態。

    具有 YARN ACCEPTED 狀態的 Livy 記錄範例。 Livy 已經提交 YARN 應用程式。

    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. 檢視 YARN 使用者介面

    從 Azure Data Studio 大型資料叢集管理儀表板取得 YARN 端點 URL,或執行 azdata bdc endpoint list –o table

    例如:

    azdata bdc endpoint list -o table
    

    退貨

    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. 檢查應用程式識別碼以及個別應用程式主控和容器的日誌。

    檢查應用程式識別碼

  6. 檢閱 YARN 應用程式記錄。

    取得應用程式的應用程式記錄。 使用 kubectl 來連線到 sparkhead-0 Pod,例如:

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

    然後使用正確的 application_id,在該命令介面中執行此命令:

    yarn logs -applicationId application_<application_id>
    
  7. 搜尋錯誤或堆疊。

    針對 hdfs 的許可權錯誤範例。 在 Java 堆疊中尋找 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. 查看SPARK UI。

    Spark UI

    鑽研階段任務以尋找錯誤。

後續步驟

針對 SQL Server 巨量數據叢集 Active Directory 整合進行疑難解答