Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Migreer uw workloads van klassieke berekening naar serverloze berekeningen. Serverloze rekenprocessen verwerken het inrichten, schalen, runtime-upgrades en optimalisatie automatisch.
De meeste klassieke workloads kunnen worden gemigreerd met minimale of geen codewijzigingen. Deze pagina is gericht op deze workloads. Sommige functies, zoals df.cache, worden nog niet ondersteund op serverloos, maar er zijn geen codewijzigingen nodig zodra deze beschikbaar zijn. Bepaalde werkbelastingen die afhankelijk zijn van R- of Scala-notebooks, vereisen klassieke berekeningen en kunnen niet worden gemigreerd naar serverloos. Zie Serverloze rekenbeperkingen voor een volledige lijst met huidige beperkingen.
Migratiestappen
Voer de volgende stappen uit om uw workloads van klassieke berekening naar serverloze berekeningen te migreren:
- Controleer de vereisten: controleer of de toegang tot uw werkruimte, netwerken en cloudopslag voldoet aan de vereisten. Zie voordat u begint.
- Code bijwerken: breng alle benodigde code- en configuratiewijzigingen aan. Zie Uw code bijwerken.
- Test uw workloads: valideer de compatibiliteit en correctheid voordat u de overstap maakt. Zie Uw workloads testen.
- Kies een prestatiemodus: selecteer de prestatiemodus die het beste overeenkomt met uw workloadvereisten. Zie Een prestatiemodus kiezen.
- Migreren in fasen: serverloos incrementeel implementeren, te beginnen met nieuwe en workloads met een laag risico. Zie Migreren in fasen.
- Kosten bewaken: serverloos DBU-verbruik bijhouden en waarschuwingen instellen. Zie Kosten monitoren.
Voordat u begint
Voordat u begint met migreren, moet u mogelijk een aantal verouderde configuraties in uw werkruimte bijwerken.
| Voorwaarde | Action | Details |
|---|---|---|
| Workspace is ingeschakeld voor Unity Catalog | Migreren vanuit Hive Metastore indien nodig | Werk een Azure Databricks-werkruimte bij naar Unity Catalog |
| Netwerken geconfigureerd | VPC-peering vervangen door NCC's, Private Link of firewallregels | Serverloze rekenvlaknetwerken |
| Toegang tot cloudopslag | Verouderde patronen voor gegevenstoegang vervangen door externe locaties van Unity Catalog | Verbinding maken met cloudobjectopslag met behulp van Unity Catalog |
Controleer of uw werkruimte zich in een ondersteunde regio bevindt.
Uw code bijwerken
In de volgende secties worden de code- en configuratiewijzigingen vermeld die nodig zijn om uw workloads compatibel te maken met serverloos.
Toegang tot gegevens
Verouderde patronen voor gegevenstoegang worden niet ondersteund op serverloos. Werk uw code bij om in plaats daarvan Unity Catalog te gebruiken.
| Klassiek patroon | Serverloze vervanging | Details |
|---|---|---|
DBFS-paden (dbfs:/...) |
Unity Catalog-volumes | Wat zijn Unity Catalog-volumes? |
| Hive Metastore-tabellen | Unity Catalog-tabellen (of HMS Federation) | Werk een Azure Databricks-werkruimte bij naar Unity Catalog |
| Referenties voor opslagaccount | Externe locaties van Unity Catalog | Verbinding maken met cloudobjectopslag met behulp van Unity Catalog |
| Aangepaste JDBC JAR's | Lakehouse Federation | Wat is query federatie? |
Waarschuwing
DBFS-toegang is beperkt op serverloos. Werk alle dbfs:/ paden naar Unity Catalog-volumes bij voordat u migreert. Zie Bestanden migreren die zijn opgeslagen in DBFS voor meer informatie.
Voorbeeld: DBFS-paden en Hive Metastore-verwijzingen vervangen
# 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 en code
Bepaalde API's en codepatronen worden niet ondersteund op serverloos. Raadpleeg deze tabel om te zien of uw code moet worden bijgewerkt.
| Klassiek patroon | Serverloze vervanging | Details |
|---|---|---|
RDD-API's (sc.parallelize, rdd.map) |
DataFrame API's | Spark Connect vergelijken met Spark Classic |
df.cache(), df.persist() |
Caching-aanroepen verwijderen | Beperkingen voor serverloze berekeningen |
spark.sparkContext, sqlContext |
Gebruik (SparkSession) rechtstreeks spark |
Spark Connect vergelijken met Spark Classic |
Hive-variabelen (${var}) |
SQL DECLARE VARIABLE of Python f-tekenreeksen |
DECLARE VARIABLE |
| Niet-ondersteunde Spark-configuraties | Niet-ondersteunde configuraties verwijderen. Serverloze past automatisch de meeste instellingen aan. | Spark-eigenschappen configureren voor serverloze notebooks en taken |
Voorbeeld: RDD-bewerkingen vervangen door 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")
Voorbeeld: SparkContext en caching vervangen
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")
Bibliotheken en omgevingen
U kunt bibliotheken en omgevingen op werkruimteniveau beheren met behulp van basisomgevingen en op notebookniveau met behulp van de serverloze omgeving van het notebook.
| Klassiek patroon | Serverloze vervanging | Details |
|---|---|---|
| Initscripts | Serverloze omgevingen | De serverloze omgeving configureren |
| Clusterbibliotheken | Notebook-beperkte en omgeving-bibliotheken | De serverloze omgeving configureren |
| Maven/JAR-bibliotheken | JAR-taakondersteuning voor taken; PyPI voor notebooks | JAR-taak voor jobs |
| Docker-containers | Serverloze omgevingen voor bibliotheekbehoeften | De serverloze omgeving configureren |
Maak Python pakketten vast in requirements.txt voor reproduceerbare omgevingen. Zie Python-pakketversies specificeren.
Streamen
Streaming-workloads worden ondersteund op serverloze architectuur, maar bepaalde triggers worden niet ondersteund. Werk uw code bij om de ondersteunde triggers te gebruiken.
| Sparktrigger | Ondersteund | Aantekeningen |
|---|---|---|
Trigger.AvailableNow() |
Ja | Aanbevolen |
Trigger.Once() |
Ja | Dit is verouderd verklaard. Gebruik in plaats daarvan Trigger.AvailableNow(). |
Trigger.ProcessingTime(interval) |
No | Retourneert INFINITE_STREAMING_TRIGGER_NOT_SUPPORTED |
Trigger.Continuous(interval) |
No | Gebruik in plaats daarvan de continue modus voor declaratieve Pijplijnen in Lakeflow Spark |
Standaard (geen instelling .trigger()) |
No | Als .trigger() wordt weggelaten, is de standaard ProcessingTime("0 seconds"), wat niet wordt ondersteund in serverloze omgevingen. Stel .trigger(availableNow=True) altijd expliciet in. |
Voor continue streaming migreert u naar declaratieve Spark-pijplijnen in de continue modus of gebruikt u taken met continue planning met AvailableNow. Voor grote bronnen stelt u maxFilesPerTrigger of maxBytesPerTrigger om out-of-memory-fouten te voorkomen.
Voorbeeld: Streaming-triggers herstellen
# 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))
Uw workloads testen
- Snelle compatibiliteitstest: voer de workload uit op klassieke berekeningen met de standaardtoegangsmodus en Databricks Runtime 14.3 of hoger. Als de uitvoering slaagt, kan de workload zonder codewijzigingen naar serverloos worden gemigreerd.
- Vergelijking van A/B (aanbevolen voor productie): Voer dezelfde workload uit op klassiek (beheer) en serverloos (experiment). De uitvoertabellen vergelijken en de juistheid controleren. Herhalen totdat de uitvoer overeenkomt.
- Tijdelijke configuraties: u kunt tijdens het testen tijdelijk ondersteunde Spark-configuraties instellen. Verwijder ze zodra ze stabiel zijn.
Een prestatiemodus kiezen
Serverloze taken en pijplijnen ondersteunen twee prestatiemodi: standaard en geoptimaliseerd voor prestaties. De prestatiemodus die u kiest, is afhankelijk van uw workloadvereisten.
| Mode | Availability | Opstarten | Ideaal voor |
|---|---|---|---|
| Standard | Taken, declaratieve pijplijnen van Lakeflow Spark | 4-6 minuten | Kostengevoelige batch |
| Geoptimaliseerd voor prestaties | Notebooks, Taken, Lakeflow Spark declaratieve pijplijnen | Seconden | Interactief, latentiegevoelig |
Migreren in fasen
- Nieuwe workloads: start alle nieuwe notebooks en taken op serverloos.
- Workloads met een laag risico: PySpark-/SQL-workloads migreren die al in de standaardtoegangsmodus en Databricks Runtime 14.3 of hoger staan.
- Complexe workloads: migreren die codewijzigingen vereisen, zoals het herschrijven van RDD's, het bijwerken van DBFS, en het oplossen van triggerproblemen.
- Resterende workloads: controleer regelmatig naarmate de mogelijkheden worden uitgebreid.
Kosten controleren
Serverloze facturering is gebaseerd op DBU-verbruik, niet op clustertijd. Valideer de kostenverwachtingen met representatieve workloads voordat u op schaal migreert. Zie De kosten van serverloze berekeningen bewaken voor hulpprogramma's en strategieën voor het bewaken van serverloze kosten.
Aanvullende bronnen
- Aanbevolen procedures voor serverloze berekening: Optimalisatietips voor serverloze workloads
- Beperkingen voor serverloze berekeningen: volledige lijst met huidige beperkingen en niet-ondersteunde functies
- De serverloze omgeving configureren: Bibliotheken en afhankelijkheden beheren
- Ondersteunde Spark-configuraties: Spark-configuraties beschikbaar op serverloos
- Spark Connect versus klassieke Spark: Gedragsverschillen in serverloze architectuur
- Serverloze netwerkbeveiliging: NCC's, Private Link en firewallconfiguratie
- Releaseopmerkingen voor serverless computing: Nieuwe mogelijkheden bijhouden wanneer ze worden uitgebracht
- Upgradehandleiding voor Unity Catalog: Migreren van Hive Metastore naar Unity Catalog
U kunt ook verwijzen naar de volgende blogberichten voor meer informatie:
- Wat is serverloze computing?: Overzicht van serverloze mogelijkheden en klantresultaten
- Ontwikkeling van data engineering: hoe serverloze compute notebooks en Lakeflow-taken transformeert: hoe serverloze computing Lakeflow-taken en -pijplijnen aandrijft.