Compartilhar via


Resolver problemas de um pyspark notebook

Important

Os Clusters de Big Data do Microsoft SQL Server 2019 foram desativados. O suporte para clusters de Big Data do SQL Server 2019 terminou em 28 de fevereiro de 2025. Para obter mais informações, consulte a postagem no blog de anúncios e as opções de Big Data na plataforma microsoft SQL Server.

Este artigo demonstra como solucionar problemas de um pyspark notebook que falha.

Arquitetura de um trabalho do PySpark no Azure Data Studio

O Azure Data Studio se comunica com o ponto de extremidade livy em Clusters Big Data do SQL Server.

O livy ponto de extremidade emite comandos spark-submit no cluster de Big Data. Cada spark-submit comando tem um parâmetro que especifica YARN como o gerenciador de recursos de cluster.

Para solucionar com eficiência a sessão do PySpark, você coletará e revisará os logs em cada camada: Livy, YARN e Spark.

Estas etapas de solução de problemas exigem que você tenha:

  1. CLI de Dados do Azure (azdata) instalada e com configuração definida corretamente para o cluster.
  2. Familiaridade com a execução de comandos do Linux e algumas habilidades de solução de problemas de log.

Troubleshooting steps

  1. Revise as mensagens de pilha e de erro no pyspark.

    Obtenha a ID do aplicativo da primeira célula do notebook. Use essa ID do aplicativo para investigar os livylogs do YARN e do Spark. SparkContext usa essa ID do aplicativo YARN.

    Failed cell

  2. Obtenha os logs.

    Usar azdata bdc debug copy-logs para investigar

    O exemplo a seguir estabelece conexão com o endpoint do cluster de Big Data para copiar logs. Atualize os valores a seguir no exemplo antes de executar.

    • <ip_address>: ponto de extremidade do cluster de Big Data
    • <username>: seu nome de usuário do cluster de Big Data
    • <namespace>: o namespace do Kubernetes para seu cluster
    • <folder_to_copy_logs>: o caminho da pasta local para o qual você deseja que seus logs sejam copiados
    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. Examine os logs do Livy. Os logs do Livy estão em <namespace>\sparkhead-0\hadoop-livy-sparkhistory\supervisor\log.

    • Pesquise a ID do aplicativo YARN na primeira célula do notebook pyspark.
    • Busque ERR status.

    Exemplo de log do Livy que está em estado YARN ACCEPTED. Livy enviou a aplicação do 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. Examinar a interface do usuário do YARN

    Obtenha a URL de endpoint YARN no Painel de Gerenciamento de Cluster de Big Data do Azure Data Studio ou execute azdata bdc endpoint list –o table.

    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. Verifique a ID do aplicativo e os logs individuais de application_master e contêiner.

    Verificar a ID do aplicativo

  6. Examine os logs do aplicativo YARN.

    Obtenha o log do aplicativo. Use kubectl para se conectar ao sparkhead-0 pod, por exemplo:

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

    Em seguida, execute este comando dentro desse shell usando o correto application_id.

    yarn logs -applicationId application_<application_id>
    
  7. Pesquise erros ou pilhas.

    Um exemplo de erro de permissão em relação aos hdfs. Na pilha de java, procure o 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. Examine a interface do usuário do SPARK.

    Spark UI

    Aprofunde-se nas tarefas das etapas em busca de erros.

Next steps

Solucionar problemas de integração do AD aos Clusters de Big Data do SQL Server