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í.

Migrujte s migračním agentem

Important

Tato funkce je v beta verzi. Správci pracovního prostoru jej mohou povolit ze stránky Previews tím, že se přihlásí do náhledu Compute Agenta . Viz Manage Azure Databricks preview.

K migraci jednoho notebooku nebo úlohy do bezserverového výpočetního prostředí můžete použít migračního agenta. Agent přezkoumá prostředí pracovní zátěže, knihovny, konfigurace Sparku, tagy a kód a poté každou změnu navrhne jako individuální návrh, který můžete přijmout nebo odmítnout. Přijaté změny jsou aplikovány na místě a lze je vrátit zpět.

Co agent kontroluje a mění

Area Co agent dělá
Prostředí a knihovny Převádí instalace knihoven do specifikace serverless prostředí, včetně instalací %pip, inicializačních skriptů clusteru, knihoven clusteru v úlohách a odkazů na soukromý index balíčků.
Proměnné prostředí Převádí proměnné prostředí clusteru do jejich serverless ekvivalentů, zachovává odkazy na tajné informace pracovního prostoru a vynechává hodnoty spravované platformou.
Přístup k datům a úložišti Přepisuje cesty nekompatibilní se serverless, jako jsou lokální disk, dbfs:/ a připojené cesty, na svazky Unity Catalog. Agent automaticky provádí jednoznačné přepisy a žádá vás, abyste si vybrali svazek, pokud je cíl nejasný.
Konfigurace Sparku Klasifikuje každou konfiguraci Sparku, komentuje konfigurace, které je bezpečné zrušit, a označuje a odstraňuje konfigurace, které serverless nepodporuje. Zahrnuje jak konfigurace připojené ke clusteru, tak konfigurace v notebooku.
Kód pracovní zátěže Přepisuje kód, který serverless nepodporuje, na kompatibilní ekvivalenty, například RDD operace přepsané do DataFrame operací, a upravuje kód pro chování SQL v ANSI režimu na serverless.
Štítky Překládá vlastní clusterové tagy, například cost-center tag, na jejich serverless ekvivalenty.
Výkonnostní režim Navrhuje režim výkonu založený na konfiguraci clusteru. Viz Volba režimu výkonu.

Požadavky

  • Doporučuje se administrátorský přístup pracovního prostoru, aby byla zajištěna úplná migrace. Je to proto, že agent také kontroluje globální init skripty na úrovni pracovního prostoru nad rámec cílové zátěže. Možná budete moci migrovat, pokud máte CAN MANAGE oprávnění k zátěži, ale bez administrátorských oprávnění to může vést k chybějícím knihovnám, nastavení prostředí nebo tagům.

  • Potvrďte, že máte přístup k agentovi. Zadejte /compute v Genie Code. /compute Mělo by se objevit v menu automatického doplňování. Pokud se nezobrazí, správce pracovního prostoru musí ve vašem pracovním prostoru povolit náhled.

    Panel Genie Code se zadaným textem /compute, který v nabídce automatického doplňování zobrazuje příkaz /compute s popisem Migrovat úlohy na bezserverové výpočty

Migrace poznámkového bloku

  1. Otevřete zápisník, který chcete přestěhovat.
  2. Otevřete Genie Code a spusťte /compute migrate to serverless z příkazové palety / .
  3. Projděte zjištění agenta. Agent prohledává prostředí, knihovny a kód zápisníku a navrhuje změnu pro každou položku, která ji potřebuje, například přesun instalace knihovny do specifikace prostředí nebo přepsání kódové buňky tak, aby běžela na serverless.
  4. Přijměte nebo odmítněte každou navrhovanou změnu.
  5. Aplikujte změny, které jste přijali. Jsou zapsány do sešitu přímo na místě.
  6. Připojte notebook k serverless a spusťte ho, abyste potvrdili, že se chová podle očekávání. Viz Ověřování migrované pracovní zátěže.

Migrujte práci

  1. Otevřete práci, kterou chcete přestěhovat.
  2. Otevřete Genie Code a spusťte /compute migrate to serverless z příkazové palety / .
  3. Agent vytvoří klon vaší úlohy a pokusí se migrovat naklonovanou úlohu do bezserverového prostředí.
  4. Projděte zjištění agenta. Pro multitaskovou úlohu agent vyjmenovává každou úlohu a její konfiguraci clusteru pro jednotlivé úlohy a navrhuje změny pro každou z nich, přičemž zachová harmonogram dané úlohy.
  5. Přijměte nebo odmítněte každou navrhovanou změnu na migrační ploše: prostředí a knihovny, konfigurace Spark a jakýkoli kód pracovní zátěže, který se musí změnit.
  6. Aplikujte změny, které jste přijali. Výpočetní prostředky úlohy jsou přepnuty do režimu serverless.
  7. Spusť úlohu v prostředí serverless a ověř výsledky. Viz Ověřování migrované pracovní zátěže.
  8. Volitelně, jako poslední krok, agent propaguje migrovaný klon. Zkopíruje konfiguraci klonu a zápisníky zpět na původní práci (zachová stejné ID práce, rozvrh a oprávnění), pak klon smaže. Pokud přeskočíte nasazení a ponecháte obě úlohy, pozastavte plánování u té úlohy, kterou právě nespouštíte, jinak stejný spouštěč aktivuje obě a může dojít k duplicitním zápisům nebo jiným vedlejším účinkům.

Ověřit migrovanou pracovní zátěž

Agent navrhuje a aplikuje změny, ale nespouští vaši pracovní zátěž ani neověřuje její výstup. Vždy spusťte migrovanou pracovní zátěž na serverless a ověřte výsledky, než se na ni spoléháte, zvlášť u zátěží, které zapisují do produkčních tabulek. Pokud agent navrhne změnu, která vypadá špatně, odmítněte ji a pošlete nám zpětnou vazbu, abychom agenta mohli vylepšit. Viz Odeslání zpětné vazby k produktu.

Tip

Zatímco ověřujete migrovanou pracovní zátěž, spusťte ji v režimu optimalizovaném pro výkon. Startuje rychleji než standardní režim, takže při potvrzení výsledků dostanete rychlejší zpětnou vazbu. Před spuštěním v produkci přepněte na režim, který nejlépe vyhovuje zátěži. Viz Volba režimu výkonu.

Když agent najde něco, co nemůže bezpečně migrovat, nahlásí blokující problém a standardně se zastaví. Můžete mu explicitně nařídit, aby přešel přes některé blokátory kompatibility nebo závislostí, ale tím riskujete, že tyto závislosti, atribuce nákladů nebo chování za běhu se nepřenesou a workload může selhat na serverless.

Vrátit zpět změny migrace

Změny, které agent uplatní, jsou vratné.

U zápisníku ho otevřete a obnovte verzi z doby těsně před migrací. Viz Historie verzí v poznámkových blocích Databricks.

U úkolu, pokud jste nepropagovali migrovaný klon, vaše původní práce se nikdy nezměnila: spusťte ji jako dříve a smažte klon. Pokud jste klon povýšili, obnovte jej ze zálohy, kterou agent vytvořil předtím, než provedl jakékoli změny:

  1. Otevřete zálohovací složku ve svém pracovním prostředí Home: /Workspace/Users/<your-username>/serverless-migration/backups/job-<job-id>/<timestamp>/. Agent tuto cestu ukázal během migrace. Pokud je několik časových značek, vyberte tu těsně před migrací.
  2. Otevřete job.yaml, které obsahuje nastavení úlohy před migrací, a použijte tato nastavení znovu na tutéž úlohu pomocí požadavku POST /api/2.2/jobs/reset, který přepíše nastavení úlohy hodnotami, které zadáte. Můžete je také vložit do JSON definice práce v uživatelském rozhraní. Tím se vrací práce ke klasickému výpočetnímu režimu.
  3. Open mapping.yaml, který uvádí každý zálohovaný soubor a původní cestu, odkud pochází. Každý záložní soubor zkopírujte zpět přes původní cestu, abyste zrušili přepisy kódu.
  4. Spusť úkol, abys potvrdil, že se chová stejně jako před migrací.

Migrace tuto zálohu nikdy nesmaže. Úlohy, které agent neupravil, například úlohy pocházející z Gitu, SQL nebo dbt úlohy, jsou zaznamenány v job.yaml, ale jejich soubory se do zálohy nekopírují, takže je v případě potřeby obnovte ze svého „source of truth“.

Známá omezení

  • Jako blokátory jsou hlášeny následující položky: vlastní image, varianty prostředí ML Runtime, verze Databricks Runtime starší než 13, konfigurace Sparku, které nelze v prostředí serverless bezpečně ignorovat, a závislosti, jako jsou egg balíčky, soubory JAR a knihovny Maven. Blokátor znamená, že se agent zastaví, místo aby migroval danou položku. Můžete to buď vyřešit sami a migraci spustit znovu, nebo říct agentovi, aby migroval, což tu položku nechá nevyřešenou a může způsobit selhání zátěže na serverless.
  • Agent čte init skripty uložené v pracovních souborech nebo svazcích Unity Catalog. Init skripty uložené v ABFSS nebo DBFS nelze číst a jsou hlášeny jako blokátory.
  • Agent nekontroluje každý klasický výpočetní atribut. Cluster log delivery a SSH klíče nejsou modelovány a i když detekuje mnoho závislostí DBFS mountů z kódu zátěže, nevyjmenovává ani neřeší každý mount.
  • Cache a checkpoint API, globální dočasné pohledy, DBFS volání pro správu mountů a kód Scala nebo R jsou ve výchozím nastavení tvrdé blokátory. Můžete agentovi nařídit, aby pokračoval, ale nevyřešená funkčnost zůstane nezměněná a může selhat i na serverless.
  • Pracovní pozice s více než 10 migrovatelnými úkoly nelze v současnosti migrovat.
  • Agent migruje jednu pracovní zátěž najednou. Neexistuje zjišťování v rámci celé flotily, hromadná migrace ani pracovní postup schvalování administrátorem.
  • Agent navrhuje změny a aplikuje ty, které přijmete, ale neprovádí vaši pracovní zátěž ani nekontroluje správnost výstupu. Ověřte migrované pracovní zatížení, než se na něj spoléhate pro produkční data.
  • Pokud je zdrojem pravdy vašeho workloadu Databricks Asset Bundle nebo složka Git, agent aplikuje změny na aktuální objekt pracovního prostoru. Slaďte tyto změny s balíčkem nebo repozitářem, aby pozdější nasazení migraci nepřepsalo.

Ruční migrace na serverless

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: