Adapte o seu código Apache Spark existente para Azure Databricks

Este artigo descreve as alterações necessárias para adaptar cargas de trabalho Apache Spark existentes para correr no Azure Databricks. Quer esteja a migrar para o Azure Databricks a partir de um cluster local, de uma infraestrutura personalizada baseada na cloud ou de outra oferta empresarial do Apache Spark, a maioria das cargas de trabalho requer apenas algumas alterações para entrar em produção. O Azure Databricks estende, simplifica e melhora o desempenho do Apache Spark ao introduzir otimizações personalizadas, configurar e implementar infraestruturas e manter dependências no Databricks Runtime.

Importante

Quando você atualiza versões do Apache Spark, pode haver alterações significativas na sintaxe. Consulte as notas de versão e compatibilidade das versões do Databricks Runtime e o guia de migração do Spark.

Alterar parquet para delta

A Databricks recomenda o uso do Delta Lake em vez de Parquet ou ORC ao gravar dados. O Azure Databricks otimizou muitas funcionalidades para eficiência ao interagir com tabelas suportadas por Delta Lake, e atualizar dados e código do Parquet para Delta Lake requer apenas alguns passos. Consulte Migrar um data lake do Parquet para o Delta Lake.

Como o Delta Lake fornece garantias de transação ACID, você pode simplificar cargas de trabalho para remover soluções alternativas voltadas para a criação de pseudotransacionalidade em operações do Apache Spark. Exemplos incluem:

  • Construindo uma estrutura de diretórios ou estratégia de particionamento que permite que todos os arquivos de uma determinada operação sejam descobertos simultaneamente como parte de uma partição.
  • Configurar ou confiar no metastore para adicionar transacionalidade em relação à forma como novos dados são descobertos.
  • Usando MSCK repair para registar ficheiros escritos numa tabela no metastore.
  • Usando alter table add partition para adicionar partições manualmente a uma tabela.

Veja Quando particionar tabelas em Azure Databricks.

Nota

Pode executar cargas de trabalho sem atualizar os formatos de dados usados, mas muitos dos maiores ganhos de desempenho no Azure Databricks estão diretamente ligados ao Delta Lake.

Recompile o código do Apache Spark com bibliotecas compatíveis com o Databricks Runtime

Cada versão do Databricks Runtime vem pré-configurada com muitas das bibliotecas necessárias nos aplicativos Apache Spark. Você pode instalar bibliotecas adicionais em sua computação conforme necessário, mas sempre que possível, o Databricks recomenda o uso de versões de biblioteca empacotadas no Databricks Runtime que são testadas quanto à compatibilidade. Cada versão do Databricks Runtime inclui uma lista de todas as bibliotecas instaladas. Consulte as notas de versão do Databricks Runtime, as versões e a compatibilidade.

Remover comandos de criação do SparkSession

Muitas cargas de trabalho herdadas do Apache Spark declaram explicitamente uma nova SparkSession para cada tarefa. O Azure Databricks cria automaticamente um SparkContext para cada cluster de computação e cria uma SparkSession isolada para cada notebook ou trabalho executado no cluster. Pode manter a capacidade de compilar e testar código localmente e depois implementar para Azure Databricks atualizando estes comandos para usar SparkSession.builder().getOrCreate().

Remover comandos de script de terminal

O Apache Spark requer que os programas declarem explicitamente que estão completos usando comandos como sys.exit() ou sc.stop(). O Azure Databricks termina automaticamente e limpa os trabalhos à medida que chegam à conclusão, por isso estes comandos não são necessários e devem ser removidos.

Azure Databricks também termina automaticamente e limpa cargas de trabalho de Structured Streaming na terminação da execução, permitindo remover awaitTermination() e comandos semelhantes das aplicações de Structured Streaming. Veja Quando usar awaitTermination().

Trust Azure Databricks para configurar o teu cluster

O Azure Databricks configura automaticamente todas as definições do driver e executores do seu cluster de computação para maximizar a resiliência e o uso de recursos. Fornecer configurações personalizadas para os executores ou JVM pode resultar em desempenho reduzido. O Databricks recomenda definir apenas as configurações do Spark que são necessárias para controlar a manipulação de tipos ou funções para que a lógica permaneça consistente.

Execute suas cargas de trabalho

Agora que removeu padrões, comandos e definições que poderiam interferir com a execução do Azure Databricks, pode executar as suas cargas de trabalho num ambiente de teste e comparar desempenho e resultados com a sua infraestrutura legada. Embora muitas das competências que a sua equipa possa ter desenvolvido para resolver problemas e melhorar o desempenho das cargas de trabalho do Apache Spark ainda possam ser aproveitadas no Azure Databricks, mais frequentemente pode ver ganhos maiores ao atualizar os passos para usar novas funcionalidades no Apache Spark, Delta Lake ou produtos personalizados do Azure Databricks.