Partilhar via


Analisar trabalhos do Spark com a Biblioteca do Job Insight (visualização)

O Job Insight é uma biblioteca de diagnóstico baseada em Java projetada para ajudá-lo a analisar interativamente aplicativos Spark concluídos no Microsoft Fabric. O Job insight permite obter informações mais detalhadas sobre os trabalhos do Spark recuperando dados de execução estruturados, como consultas, trabalhos, estágios, tarefas e executores em seus blocos de anotações do Fabric Spark usando o Scala.

Não importa se você está solucionando problemas de desempenho ou realizando diagnósticos personalizados, a biblioteca de insights de trabalho permite que você trabalhe com a telemetria do Spark como conjuntos de dados nativos do Spark, facilitando a solução de problemas de desempenho e a exploração de insights de execução.

Observação

O acesso à biblioteca de insights de trabalho usando o PySpark ainda não é suportado.

Pré-requisitos

  • Apenas o Scala é suportado.

  • Requer o Fabric Runtime 1.3 ou posterior (com o Spark 3.5+).

  • O PySpark não suporta o acesso à biblioteca do Job Insight.

Capacidades chave

  • Análise interativa do trabalho do Spark: acesse as métricas de execução do Spark, incluindo detalhes do trabalho, do estágio e do executor.

  • Métricas de execução persistentes: salve as métricas de execução de tarefas do Spark em tabelas lakehouse para geração de relatórios e integração.

  • Cópia do log de eventos do Spark: exporte logs de eventos para o OneLake ou o Armazenamento de Dados do Azure.

Exemplo de caderno

Você pode usar o bloco de anotações de exemplo fornecido (arquivo ipynb de exemplo) para começar. O caderno inclui:

  • Exemplo analyze() e loadJobInsight() código
  • Exibir comandos (por exemplo, queries.show())
  • Exemplos de cópia do log de eventos.

Como Começar

1. Analise um trabalho Spark concluído

Extraia dados de execução estruturados de um trabalho concluído do Spark com a analyze API:

import com.microsoft.jobinsight.diagnostic.SparkDiagnostic
val jobInsight = SparkDiagnostic.analyze( 
    $workspaceId, 
    $artifactId, 
    $livyId, 
    $jobType, 
    $stateStorePath, 
     $attemptId 
) 
val queries = jobInsight.queries 
val jobs = jobInsight.jobs 
val stages = jobInsight.stages 
val tasks = jobInsight.tasks 
val executors = jobInsight.executors 

2. Salve métricas e logs em uma casa de lago

Salve a saída da análise em tabelas lakehouse para geração de relatórios ou integração:

val df = jobInsight.queries 
df.write 
.format("delta") 
.mode("overwrite") 
.saveAsTable("sparkdiagnostic_lh.Queries") 

Aplique a mesma lógica a outros componentes, como trabalhos, estágios ou executores.

3. Recarregar a análise anterior

Se você já executou uma análise e salvou a saída, recarregue-a sem repetir o processo:

import com.microsoft.jobinsight.diagnostic.SparkDiagnostic 
val jobInsight = SparkDiagnostic.loadJobInsight( 
    $stateStorePath 
) 
val queries = jobInsight.queries 
val jobs = jobInsight.jobs 
val stages = jobInsight.stages 
val tasks = jobInsight.tasks 
val executors = jobInsight.executors

4. Copie os logs de eventos do spark

Copie os logs de eventos do Spark para um local ABFSS (como OneLake ou Azure Data Lake Storage (ADLS) Gen2) com esta API:

import com.microsoft.jobinsight.diagnostic.LogUtils 
val contentLength = LogUtils.copyEventLog( 
    $workspaceId, 
    $artifactId, 
    $livyId, 
    $jobType, 
    $targetDirectory, 
    $asyncMode, 
    $attemptId 
)

Melhores práticas

Verifique se você tem as permissões de leitura/gravação corretas para todos os caminhos ABFSS.

  • Salve analyze() as saídas em um local durável para reutilização.

  • Use asyncMode = true ao copiar logs para trabalhos grandes para reduzir a latência.

  • Monitoramento do tamanho e da estrutura do log de eventos, para evitar problemas de desserialização.

Solução de problemas

Questão Resolução
Acesso de gravação negado Verifique as permissões de gravação para o diretório ABFSS de destino.
stateStorePath já existe Use um novo caminho que ainda não exista para cada chamada a ser analisada().