Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Migrera dina arbetsbelastningar från klassisk beräkning till serverlös beräkning. Serverlös beräkning hanterar etablering, skalning, körningsuppgraderingar och optimering automatiskt.
De flesta klassiska arbetsbelastningar kan migreras med minimala eller inga kodändringar. Den här sidan fokuserar på dessa arbetsbelastningar. Vissa funktioner, till exempel df.cache, stöds inte ännu på serverlösa, men kräver inte kodändringar när de är tillgängliga. Vissa arbetsbelastningar som är beroende av R- eller Scala-notebook-filer kräver klassisk beräkning och kan inte migreras till serverlösa. En fullständig lista över aktuella begränsningar finns i Begränsningar för serverlös beräkning.
Migreringssteg
Så här migrerar du dina arbetsbelastningar från klassisk beräkning till serverlös beräkning:
- Kontrollera kraven: Kontrollera att din arbetsyta, nätverk och molnlagringsåtkomst uppfyller kraven. Se Innan du börjar.
- Uppdateringskod: Gör nödvändiga kod- och konfigurationsändringar. Se Uppdatera din kod.
- Testa dina arbetsbelastningar: Verifiera kompatibilitet och korrekthet innan du byter över. Se Testa dina arbetsbelastningar.
- Välj ett prestandaläge: Välj det prestandaläge som bäst matchar dina arbetsbelastningskrav. Se Välj ett prestandaläge.
- Migrera i faser: Distribuera serverlöst stegvis, med början i nya arbetsbelastningar med låg risk. Se Migrera i faser.
- Övervaka kostnader: Spåra serverlös DBU-förbrukning och konfigurera aviseringar. Se Övervaka kostnader.
Innan du börjar
Innan du börjar migrera kan du behöva uppdatera några äldre konfigurationer på din arbetsyta.
| Förutsättning | Action | Detaljer |
|---|---|---|
| Arbetsytan är aktiverad för Unity Catalog | Migrera från Hive-metaarkivet om det behövs | Uppgradera en Azure Databricks arbetsyta till Unity Catalog |
| Konfigurerat nätverk | Ersätt VPC-peering med NCC:er, Private Link eller brandväggsregler | Nätverk för serverlös beräkningsplattform |
| Åtkomst till molnlagring | Ersätt äldre dataåtkomstmönster med externa platser i Unity Catalog | Ansluta till molnobjektlagring med Unity Catalog |
Bekräfta att arbetsytan finns i en region som stöds.
Uppdatera koden
I följande avsnitt visas de kod- och konfigurationsändringar som krävs för att göra dina arbetsbelastningar kompatibla med serverlösa.
Dataåtkomst
Äldre dataåtkomstmönster stöds inte på serverlösa. Uppdatera koden så att den använder Unity Catalog i stället.
| Klassiskt mönster | Serverlös lösning | Detaljer |
|---|---|---|
DBFS-sökvägar (dbfs:/...) |
Unity Catalog-volymer | Vad är Unity Catalog-volymer? |
| Hive Metastore-tabeller | Unity Catalog-tabeller (eller HMS-federation) | Uppgradera en Azure Databricks arbetsyta till Unity Catalog |
| Autentiseringsuppgifter för lagringskonto | Externa platser i Unity Catalog | Ansluta till molnobjektlagring med Unity Catalog |
| Anpassade JDBC-JAR:er | Lakehouse Federation | Vad är sökfrågefederation? |
Varning
DBFS-åtkomsten är begränsad på serverlös. Uppdatera alla dbfs:/ sökvägar till Unity Catalog-volymer innan du migrerar. Mer information finns i Migrera filer som lagras i DBFS.
Exempel: Ersätt DBFS-sökvägar och Hive-metaarkivreferenser
# 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
API:er och kod
Vissa API:er och kodmönster stöds inte på serverlösa. Referera till den här tabellen för att se om koden behöver uppdateras.
| Klassiskt mönster | Serverlös lösning | Detaljer |
|---|---|---|
RDD-API:er (sc.parallelize, rdd.map) |
Api:er för DataFrame | Jämför Spark Connect med Spark Classic |
df.cache(), df.persist() |
Ta bort cachelagringsanrop | Begränsningar för serverlös beräkning |
spark.sparkContext, sqlContext |
Använd spark (SparkSession) direkt |
Jämför Spark Connect med Spark Classic |
Hive-variabler (${var}) |
SQL DECLARE VARIABLE eller Python f-strings |
DECLARE VARIABLE |
| Spark-konfigurationer som inte stöds | Ta bort konfigurationer som inte stöds. Serverlös justerar automatiskt de flesta inställningar. | Konfigurera Spark-egenskaper för serverlösa notebooks och jobb |
Exempel: Ersätt RDD-åtgärder med 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")
Exempel: Ersätt SparkContext och cachelagring
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")
Bibliotek och miljöer
Du kan hantera bibliotek och miljöer på arbetsytans nivå med hjälp av basmiljöer och på notebook-nivå med hjälp av notebook-filens serverlösa miljö.
| Klassiskt mönster | Serverlös lösning | Detaljer |
|---|---|---|
| Initieringsskript | Serverlösa miljöer | Konfigurera den serverlösa miljön |
| Bibliotek med klusteromfattning | Bibliotek med notebook-omfång eller miljö | Konfigurera den serverlösa miljön |
| Maven/JAR-bibliotek | JAR-uppgiftsstöd för jobb; PyPI för notebookar | JAR-uppgift för jobb |
| Docker-containrar | Serverlösa miljöer för biblioteksbehov | Konfigurera den serverlösa miljön |
Fäst Python paket i requirements.txt för reproducerbara miljöer. Se Ange Python-paketversioner.
Strömmande
Strömmande arbetslaster stöds i serverlösa miljöer, men vissa utlösare stöds inte. Uppdatera koden så att den använder utlösare som stöds.
| Spark-utlösare | Understödd | Notes |
|---|---|---|
Trigger.AvailableNow() |
Ja | Rekommenderad |
Trigger.Once() |
Ja | Detta är inaktuellt. Använd Trigger.AvailableNow() i stället. |
Trigger.ProcessingTime(interval) |
No | Returnerar INFINITE_STREAMING_TRIGGER_NOT_SUPPORTED |
Trigger.Continuous(interval) |
No | Använd kontinuerligt läge för Lakeflow Spark deklarativa pipelines i stället |
Standard (utan inställning .trigger()) |
No | Om du utelämnar .trigger() är standardvärdet ProcessingTime("0 seconds"), vilket inte stöds i en serverlös miljö. Ange .trigger(availableNow=True) alltid explicit. |
För kontinuerlig direktuppspelning migrerar du till Spark Deklarativa Pipelines i kontinuerligt läge eller använder kontinuerligt schemalagda jobb med AvailableNow. För att förhindra minnesfel vid stora källor, ställ in maxFilesPerTrigger eller maxBytesPerTrigger.
Exempel: Åtgärda utlösare för direktuppspelning
# 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))
Testa dina arbetsbelastningar
- Snabbkompatibilitetstest: Kör arbetsbelastningen på klassisk beräkning med standardåtkomstläge och Databricks Runtime 14.3 eller senare. Om körningen lyckas kan arbetsbelastningen migreras till serverlös utan några kodändringar.
- A/B-jämförelse (rekommenderas för produktion): Kör samma arbetsbelastning på klassisk (kontroll) och serverlös (experiment). Diff-utdatatabeller och verifiera korrekthet. Iterera tills utdata matchar.
- Tillfälliga konfigurationer: Du kan tillfälligt ställa in Spark-konfigurationer som stöds under testningen. Ta bort dem när de är stabila.
Välj ett prestandaläge
Serverlösa jobb och pipelines stöder två prestandalägen: standard och prestandaoptimerad. Vilket prestandaläge du väljer beror på dina arbetsbelastningskrav.
| Läge | Tillgänglighet | Startup-företag | Passar bäst för |
|---|---|---|---|
| Standard | Jobb, Lakeflow Spark deklarativa pipeline | 4–6 minuter | Kostnadskänslig sats |
| Prestandaoptimerad | Notebooks, Jobb, Lakeflow Spark Deklarativa pipelines | Sekunder | Interaktiv, svarstidskänslig |
Migrera i faser
- Nya arbetslaster: Starta alla nya notebook-filer och jobb på serverlöst.
- Lågriskarbetsbelastningar: Migrera PySpark/SQL-arbetsbelastningar som redan är i standardåtkomstläge och Databricks Runtime 14.3 eller senare.
- Komplexa arbetsbelastningar: Migrera arbetsbelastningar som behöver kodändringar (RDD-omskrivningar, DBFS-uppdateringar, utlösarkorrigeringar).
- Återstående arbetsbelastningar: Granska regelbundet när funktionerna utökas.
Övervaka kostnader
Serverlös fakturering baseras på DBU-förbrukning, inte klusterupptid. Verifiera kostnadsförväntningarna med representativa arbetsbelastningar innan du migrerar i stor skala. Verktyg och strategier för att övervaka serverlösa kostnader finns i Övervaka kostnaden för serverlös beräkning.
Ytterligare resurser
- Metodtips för serverlös beräkning: Optimeringstips för serverlösa arbetsbelastningar
- Begränsningar för serverlös beräkning: Fullständig lista över aktuella begränsningar och funktioner som inte stöds
- Konfigurera den serverlösa miljön: Hantera bibliotek och beroenden
- Spark-konfigurationer som stöds: Spark-konfigurationer som är tillgängliga på serverlösa
- Spark Connect jämfört med klassisk Spark: Beteendeskillnader i serverlös arkitektur
- Serverlös nätverkssäkerhet: NCCs, Private Link och brandväggskonfiguration
- Viktig information om serverlös beräkning: Spåra nya funktioner när de levereras
- Uppgraderingsguide för Unity Catalog: Migrera från Hive Metastore till Unity Catalog
Mer information finns i följande blogginlägg:
- Vad är serverlös databehandling?: Översikt över serverlösa funktioner och kundresultat
- Utveckling av datateknik: Hur serverlös beräkning omvandlar notebook-filer och Lakeflow-jobb: Hur serverlösa driver Lakeflow-jobb och pipelines