Migrace z klasického výpočetního prostředí na bezserverové výpočetní prostředky

Migrujte úlohy z klasického výpočetního prostředí na bezserverové výpočetní prostředky. Bezserverové výpočetní prostředky zpracovávají zřizování, škálování, upgrady za běhu a optimalizaci automaticky.

Většina klasických úloh se dá migrovat s minimálními změnami kódu nebo bez nich. Tato stránka se zaměřuje na tyto úlohy. Některé funkce, například df.cache, ještě nejsou podporovány na bezserverové, ale nebudou vyžadovat změny kódu, jakmile budou k dispozici. Některé úlohy, které závisí na poznámkových blocích R nebo Scala, vyžadují klasické výpočetní prostředky a nebudou moct migrovat na bezserverovou architekturu. Úplný seznam aktuálních omezení najdete v tématu Omezení bezserverového výpočetního prostředí.

Kroky migrace

Pokud chcete migrovat úlohy z klasického výpočetního prostředí na bezserverové výpočetní prostředky, postupujte takto:

  1. Zkontrolujte požadavky: Ověřte, že váš pracovní prostor, sítě a přístup ke cloudovému úložišti splňují požadavky. Viz Než začnete.
  2. Aktualizovat kód: Proveďte potřebné změny kódu a konfigurace. Viz Aktualizace kódu.
  3. Otestujte své úlohy: Ověřte kompatibilitu a správnost před přechodem. Viz Testování úloh.
  4. Zvolte režim výkonu: Vyberte režim výkonu, který nejlépe odpovídá vašim požadavkům na úlohy. Viz Volba režimu výkonu.
  5. Migrace ve fázích: Postupné zavádění bezserverových úloh, počínaje novými a nízkými riziky Viz Migrace ve fázích.
  6. Monitorování nákladů: Sledování spotřeby serverless DBU a nastavení upozornění. Viz Monitorování nákladů.

Než začnete

Než začnete s migrací, možná budete muset aktualizovat některé starší konfigurace v pracovním prostoru.

Předpoklad Action Podrobnosti
Pracovní prostor je aktivován pro katalog Unity. Migrace z Hive Metastore v případě potřeby Upgradujte pracovní prostor Azure Databricks na Unity Catalog
Nakonfigurované sítě Nahrazení párování VPC pomocí NCC, Private Link nebo pravidel brány firewall Síťování výpočetní roviny bez serveru
Přístup ke cloudovému úložišti Nahrazení starších vzorů přístupu k datům externími umístěními katalogu Unity Připojte se ke cloudovému úložišti objektů pomocí katalogu Unity

Ověřte, že je váš pracovní prostor v podporované oblasti.

Aktualizace kódu

Následující části obsahují seznam změn kódu a konfigurace potřebných k tomu, aby vaše úlohy byly kompatibilní s bezserverovou architekturou.

Přístup k datům

Vzory přístupu ke starším verzím dat nejsou podporovány v bezserverové verzi. Aktualizujte kód tak, aby místo toho používal katalog Unity.

Klasický vzor Bezserverová výměna Podrobnosti
Cesty DBFS (dbfs:/...) Svazky katalogu Unity Co jsou svazky katalogu Unity?
Tabulky Hive Metastore Tabulky katalogu Unity (nebo federace HMS) Upgradujte pracovní prostor Azure Databricks na Unity Catalog
Přihlašovací údaje účtu úložiště Externí umístění katalogu Unity Připojte se ke cloudovému úložišti objektů pomocí katalogu Unity
JDBC vlastní JARy Lakehouse Federace Co je federace dotazů?

Výstraha

Přístup k DBFS je omezený na bezserverové prostředí. Před migrací aktualizujte všechny dbfs:/ cesty ke svazkům Unity Catalogu. Další informace naleznete v tématu Migrace souborů uložených v DBFS.

Příklad: Nahrazení cest DBFS a odkazů na metastore Hive
# 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

Rozhraní API a kód

Některá rozhraní API a vzory kódu nejsou na bezserverové platformě podporována. Na tuto tabulku se můžete podívat, jestli je potřeba aktualizovat kód.

Klasický vzor Bezserverová výměna Podrobnosti
Rozhraní RDD API (sc.parallelize, rdd.map) Rozhraní API datového rámce Porovnání Spark Connect s klasickým Sparkem
df.cache(), df.persist() Odebrání volání do mezipaměti Omezení výpočetních prostředků bez serveru
spark.sparkContext, sqlContext Použijte přímo spark (SparkSession) Porovnání Spark Connect s klasickým Sparkem
Proměnné Hive (${var}) Sql DECLARE VARIABLE nebo Python f-string DECLARE VARIABLE
Nepodporované konfigurace Sparku Odeberte nepodporované konfigurace. Bezserverová technologie většinu nastavení automaticky ladí. Konfigurace vlastností Sparku pro bezserverové poznámkové bloky a úlohy
Příklad: Nahrazení operací RDD datovými rámci
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")
Příklad: Nahrazení SparkContext a ukládání do mezipaměti
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")

Knihovny a prostředí

Knihovny a prostředí můžete spravovat na úrovni pracovního prostoru pomocí základních prostředí a na úrovni poznámkového bloku pomocí jeho bezserverového prostředí.

Klasický vzor Bezserverová výměna Podrobnosti
Inicializační skripty Bezserverová prostředí Konfigurace bezserverového prostředí
Knihovny v rámci clusteru Knihovny příslušející poznámkovým blokům nebo prostředím Konfigurace bezserverového prostředí
Knihovny Maven/JAR Podpora úkolů JAR pro úlohy; PyPI pro poznámkové bloky Úloha JAR pro pracoviště úloh
Docker kontejnery Bezserverová prostředí pro potřeby knihovny Konfigurace bezserverového prostředí

Připnutí balíčků Python v requirements.txt pro reprodukovatelná prostředí. Viz Zadejte verze balíčků Python.

Streamování

Úlohy streamování se podporují v bezserverové verzi, ale některé triggery se nepodporují. Aktualizujte kód tak, aby používal podporované triggery.

Trigger Sparku Podporováno Poznámky
Trigger.AvailableNow() Ano Doporučený
Trigger.Once() Ano Toto je zastaralé. Místo toho použijte Trigger.AvailableNow().
Trigger.ProcessingTime(interval) Ne Návrat INFINITE_STREAMING_TRIGGER_NOT_SUPPORTED
Trigger.Continuous(interval) Ne Místo toho používejte průběžný režim kanálů Lakeflow.
Výchozí (nenastaví se .trigger()) Ne Vynechání .trigger() výchozí na ProcessingTime("0 seconds"), což není podporováno na serverless. Vždy nastavte .trigger(availableNow=True) explicitně.

Pro průběžné streamování migrujte do deklarativních kanálů Sparku v průběžném režimu nebo používejte úlohy průběžného plánování s AvailableNow. U velkých zdrojů nastavte maxFilesPerTrigger nebo maxBytesPerTrigger, aby se zabránilo chybám nedostatku paměti.

Příklad: Oprava triggerů streamování
# 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))

Testování úloh

  1. Rychlý test kompatibility: Spusťte úlohu na klasických výpočetních prostředcích s režimem přístupu Standard a Modulem Databricks Runtime 14.3 nebo novějším. Pokud je spuštění úspěšné, může úloha migrovat na bezserverovou beze změny kódu.
  2. Porovnání A/B (doporučeno pro produkční prostředí): Spusťte stejnou úlohu v klasickém prostředí (řízení) a bezserverovém prostředí (experiment). Porovnejte výstupní tabulky a ověřte jejich správnost. Iterujte, dokud se výstupy neshodují.
  3. Dočasné konfigurace: Během testování můžete dočasně nastavit podporované konfigurace Sparku. Odeberte je, jakmile budou stabilní.

Volba režimu výkonu

Bezserverové úlohy a kanály podporují dva režimy výkonu: standardní a optimalizované pro výkon. Zvolený režim výkonu závisí na vašich požadavcích na úlohy.

Mode dostupnost Startup Nejvhodnější pro
Standard Úlohy, kanály Lakeflow 4–6 minut Dávka citlivá na náklady
Optimalizované pro výkon Poznámkové bloky, úlohy, kanály Lakeflow Sekundy Interaktivní, latence citlivá

Migrace ve fázích

  1. Nové úlohy: Spusťte všechny nové poznámkové bloky a úlohy na bezserverové platformě.
  2. Úlohy s nízkým rizikem: Migrace úloh PySpark/SQL již ve standardním režimu přístupu a modulu Databricks Runtime 14.3 nebo novějším
  3. Složité úlohy: Migrace úloh vyžadujících změny kódu (přepsání RDD, aktualizace DBFS, opravy triggerů)
  4. Zbývající úlohy: Pravidelně kontrolujte, jak se možnosti rozšiřují.

Monitorování nákladů

Bezserverová fakturace je založená na spotřebě DBU, nikoli na provozu clusteru. Před migrací ve velkém měřítku ověřte očekávání nákladů pomocí reprezentativních úloh. Nástroje a strategie pro monitorování nákladů bez serveru najdete v tématu Monitorování nákladů na bezserverové výpočetní prostředky.

Dodatečné zdroje

Další informace najdete také v následujících blogových příspěvcích: