Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Migre suas cargas de trabalho da computação clássica para a computação sem servidor. A computação sem servidor lida com provisionamento, dimensionamento, atualizações de runtime e otimização automaticamente.
A maioria das cargas de trabalho clássicas pode migrar com alterações mínimas ou sem código. Esta página se concentra nessas cargas de trabalho. Alguns recursos, como df.cache, ainda não têm suporte no sem servidor, mas não exigirão alterações de código depois de disponíveis. Determinadas cargas de trabalho que dependem de notebooks R ou Scala exigem computação clássica e não poderão migrar para sem servidor. Para obter uma lista completa das limitações atuais, consulte limitações de computação sem servidor.
Etapas da migração
Para migrar suas cargas de trabalho da computação clássica para a computação sem servidor, siga estas etapas:
- Verifique os pré-requisitos: verifique se o workspace, a rede e o acesso ao armazenamento em nuvem atendem aos requisitos. Consulte Antes de começar.
- Código de atualização: faça as alterações necessárias no código e na configuração. Consulte Atualizar seu código.
- Teste suas cargas de trabalho: valide a compatibilidade e a correção antes de cortar. Veja Teste suas cargas de trabalho.
- Escolha um modo de desempenho: selecione o modo de desempenho que melhor corresponda aos requisitos de carga de trabalho. Consulte Escolher um modo de desempenho.
- Migrar em fases: distribuir sem servidor incrementalmente, começando com cargas de trabalho novas e de baixo risco. Consulte Migrar em fases.
- Monitorar custos: acompanhe o consumo de DBU sem servidor e configure alertas. Consulte os custos do Monitor.
Antes de começar
Antes de começar a migrar, talvez seja necessário atualizar algumas configurações herdadas em seu workspace.
| Pré-requisito | Ação | Detalhes |
|---|---|---|
| O workspace está habilitado para o Unity Catalog | Migrar do Metastore do Hive, se necessário | Faça upgrade do workspace do Azure Databricks para o Unity Catalog |
| Rede configurada | Substituir o emparelhamento VPC por NCCs, Link Privado ou regras de firewall | Rede de camada de computação sem servidor |
| Acesso ao armazenamento em nuvem | Substitua os padrões de acesso a dados herdados por localizações externas do Unity Catalog. | Conectar-se ao armazenamento de objetos de nuvem usando o Unity Catalog |
Confirme se o workspace está em uma região com suporte.
Atualizar o código
As seções a seguir listam o código e as alterações de configuração necessárias para tornar suas cargas de trabalho compatíveis com sem servidor.
Acesso a dados
Não há suporte para padrões de acesso a dados herdados em computação sem servidor. Atualize seu código para usar o Catálogo do Unity.
| Padrão clássico | Substituição sem servidor | Detalhes |
|---|---|---|
Caminhos DBFS (dbfs:/...) |
Volumes do Catálogo do Unity | O que são os volumes do Catálogo do Unity? |
| Tabelas do Metastore do Hive | Tabelas Unity Catalog (ou Federação HMS) | Faça upgrade de um workspace do Azure Databricks para o Unity Catalog |
| Credenciais da conta de armazenamento | Locais externos do Unity Catalog | Conectar-se ao armazenamento de objetos de nuvem usando o Unity Catalog |
| JDBC JARs personalizados | Federação do Lakehouse | O que é federação de consulta? |
Aviso
O acesso ao DBFS é limitado no modo sem servidor. Atualize todos os dbfs:/ caminhos para volumes do Catálogo do Unity antes de migrar. Para obter mais informações, consulte Migrar arquivos armazenados no DBFS.
Exemplo: substituir caminhos DBFS e referências do Hive Metastore
# Classic
df = spark.read.csv("dbfs:/mnt/datalake/data.csv", header=True)
df.write.parquet("dbfs:/mnt/output/results")
df = spark.table("my_database.my_table")
# Serverless
df = spark.read.csv("/Volumes/main/sales/raw_data/data.csv", header=True)
df.write.parquet("/Volumes/main/analytics/output/results")
df = spark.table("main.my_database.my_table") # three-level namespace
APIs e código
Determinadas APIs e padrões de código não são suportados em ambientes serverless. Faça referência a esta tabela para ver se o código precisa ser atualizado.
| Padrão clássico | Substituição sem servidor | Detalhes |
|---|---|---|
APIs RDD (sc.parallelize, rdd.map) |
DataFrame APIs | Comparar o Spark Connect com o Spark Classic |
df.cache(), df.persist() |
Remover chamadas de cache | Limitações de computação sem servidor |
spark.sparkContext, sqlContext |
Usar spark (SparkSession) diretamente |
Comparar o Spark Connect com o Spark Classic |
Variáveis do Hive (${var}) |
SQL DECLARE VARIABLE ou f-strings do Python |
DECLARE VARIABLE |
| Configurações do Spark sem suporte | Remova configurações sem suporte. A maioria das configurações é ajustada automaticamente sem servidor. | Configurar propriedades do Spark para notebooks e trabalhos sem servidor |
Exemplo: substituir operações RDD por DataFrames
from pyspark.sql import functions as F
# sc.parallelize + rdd.map
# Classic: rdd = sc.parallelize([1, 2, 3]); rdd.map(lambda x: x * 2).collect()
df = spark.createDataFrame([(1,), (2,), (3,)], ["value"])
result = df.select((F.col("value") * 2).alias("value")).collect()
# rdd.flatMap
# Classic: sc.parallelize(["hello world"]).flatMap(lambda l: l.split(" ")).collect()
df = spark.createDataFrame([("hello world",)], ["line"])
words = df.select(F.explode(F.split("line", " ")).alias("word")).collect()
# rdd.groupByKey
# Classic: rdd.groupByKey().mapValues(list).collect()
df = spark.createDataFrame([("a", 1), ("b", 2), ("a", 3)], ["key", "value"])
grouped = df.groupBy("key").agg(F.collect_list("value").alias("values")).collect()
# rdd.mapPartitions → applyInPandas
import pandas as pd
def process_group(pdf: pd.DataFrame) -> pd.DataFrame:
return pd.DataFrame({"total": [pdf["id"].sum()]})
result = (spark.range(100).repartition(4)
.groupBy(F.spark_partition_id())
.applyInPandas(process_group, schema="total long").collect())
# sc.textFile → spark.read.text
df = spark.read.text("/Volumes/catalog/schema/volume/file.txt")
Exemplo: substituir SparkContext e cache
from pyspark.sql.functions import broadcast
# sc.broadcast → broadcast join
result = main_df.join(broadcast(lookup_df), "key")
# sc.accumulator → DataFrame aggregation
total = df.agg(F.sum("amount")).collect()[0][0]
# sqlContext.sql → spark.sql
result = spark.sql("SELECT * FROM main.db.table")
# df.cache() → remove caching calls
# Materialize expensive intermediate results to Delta as a workaround:
df = spark.read.parquet(path)
result = df.filter("status = 'active'")
expensive_df.write.format("delta").mode("overwrite").saveAsTable("main.scratch.temp")
result = spark.table("main.scratch.temp")
Bibliotecas e ambientes
Você pode gerenciar bibliotecas e ambientes no nível do workspace usando ambientes base e no nível do notebook usando o ambiente sem servidor do notebook.
| Padrão clássico | Substituição sem servidor | Detalhes |
|---|---|---|
| Scripts de inicialização | Ambientes sem servidor | Configurar o ambiente sem servidor |
| Bibliotecas com escopo de cluster | Bibliotecas de ambiente ou com escopo de bloco de anotações | Configurar o ambiente sem servidor |
| Bibliotecas Maven/JAR | Suporte para tarefas JAR em trabalhos; PyPI para notebooks | Tarefa JAR para trabalhos |
| Contêineres do Docker | Ambientes sem servidor para necessidades de biblioteca | Configurar o ambiente sem servidor |
Fixe pacotes Python em requirements.txt para criar ambientes reproduzíveis. Consulte Especificar versões de pacotes do Python.
Transmissão ao vivo
Há suporte para cargas de trabalho de streaming sem servidor, mas não há suporte para determinados gatilhos. Atualize seu código para usar os gatilhos com suporte.
| Acionador do Spark | Supported | Observações |
|---|---|---|
Trigger.AvailableNow() |
Sim | Recomendado |
Trigger.Once() |
Sim | Isto está obsoleto. Use Trigger.AvailableNow() em seu lugar. |
Trigger.ProcessingTime(interval) |
No | Retorna INFINITE_STREAMING_TRIGGER_NOT_SUPPORTED |
Trigger.Continuous(interval) |
No | Em vez disso, use o modo contínuo dos Pipelines Declarativos do Lakeflow Spark. |
Padrão (sem definir .trigger()) |
No | Omitindo .trigger() define por padrão o ProcessingTime("0 seconds"), que não é suportado em ambientes sem servidor. Sempre defina .trigger(availableNow=True) explicitamente. |
Para streaming contínuo, migre para Pipelines Declarativos do Spark em modo contínuo ou use tarefas agendadas continuamente com AvailableNow. Para fontes grandes, defina maxFilesPerTrigger ou maxBytesPerTrigger e evite erros fora de memória.
Exemplo: corrigir gatilhos de streaming
# Classic (not supported on serverless — default trigger is ProcessingTime)
query = df.writeStream.format("delta").outputMode("append").start()
# Serverless (explicit AvailableNow trigger)
query = (df.writeStream.format("delta").outputMode("append")
.trigger(availableNow=True)
.option("checkpointLocation", checkpoint_path)
.start(output_path))
query.awaitTermination()
# With OOM prevention for large sources
query = (spark.readStream.format("delta")
.option("maxFilesPerTrigger", 100)
.option("maxBytesPerTrigger", "10g")
.load(input_path)
.writeStream.format("delta")
.trigger(availableNow=True)
.option("checkpointLocation", checkpoint_path)
.start(output_path))
Teste as suas cargas de trabalho
- Teste de compatibilidade rápida: execute a carga de trabalho na computação clássica com o modo de acesso Standard e o Databricks Runtime 14.3 ou superior. Se a execução for bem-sucedida, a carga de trabalho poderá migrar para sem servidor sem nenhuma alteração de código.
- Comparação A/B (recomendada para produção): execute a mesma carga de trabalho no clássico (controle) e sem servidor (experimento). Comparar tabelas de saída e verificar a exatidão. Iterar até que os resultados correspondam.
- Configurações temporárias: você pode definir temporariamente configurações do Spark com suporte durante o teste. Remova-os quando estiverem estáveis.
Escolher um modo de desempenho
Os pipelines e trabalhos sem servidor dão suporte a dois modos de desempenho: padrão e otimizado para desempenho. O modo de desempenho escolhido depende dos requisitos de carga de trabalho.
| Modo | Disponibilidade | Inicialização | Mais adequado para |
|---|---|---|---|
| Standard | Jobs, Lakeflow Spark Declarative Pipelines | 4 a 6 minutos | Lote sensível ao custo |
| Otimizado para desempenho | Notebooks, Tarefas, Pipelines Declarativos do Lakeflow Spark | Segundos | Interativo, sensível à latência |
Migrar em fases
- Novas cargas de trabalho: inicie todos os novos notebooks e trabalhos sem servidor.
- Cargas de trabalho de baixo risco: migrar cargas de trabalho PySpark/SQL já no modo de acesso padrão e Databricks Runtime 14.3 ou superior.
- Cargas de trabalho complexas: Migrar cargas de trabalho que precisam de alterações de código (regravações de RDD, atualizações de DBFS, correções de gatilhos).
- Cargas de trabalho restantes: examine periodicamente à medida que as funcionalidades se expandem.
Monitorar custos
A cobrança sem servidor é baseada no consumo de DBU, não no tempo de atividade do cluster. Valide as expectativas de custo com cargas de trabalho representativas antes de migrar em escala. Para ferramentas e estratégias para monitorar custos sem servidor, consulte Monitorar o custo da computação sem servidor.
Recursos adicionais
- Práticas recomendadas para computação sem servidor: dicas de otimização para cargas de trabalho sem servidor
- Limitações de computação sem servidor: lista completa de limitações atuais e recursos sem suporte
- Configurar o ambiente sem servidor: gerenciar bibliotecas e dependências
- Configurações do Spark com suporte: configurações do Spark disponíveis em ambientes serverless
- Spark Connect vs. Spark clássico: Diferenças comportamentais na arquitetura sem servidor
- Serverless network security: NCCs, Link Privado e configuração de firewall
- Notas de versão de computação sem servidor: acompanhar novos recursos à medida que eles são enviados
- Guia de atualização do Catálogo do Unity: Migrar do Metastore do Hive para o Catálogo do Unity
Você também pode consultar as seguintes postagens no blog para obter mais informações:
- O que é computação sem servidor?: Visão geral dos recursos sem servidor e dos resultados do cliente
- Evolução da engenharia de dados: como a computação sem servidor está transformando notebooks e tarefas do Lakeflow: Como a computação sem servidor impulsiona as tarefas e os pipelines do Lakeflow.