Migrasi dari komputasi klasik ke komputasi tanpa server

Migrasikan beban kerja Anda dari komputasi klasik ke komputasi tanpa server. Komputasi tanpa server menangani provisi, penskalaan, peningkatan runtime, dan pengoptimalan secara otomatis.

Sebagian besar beban kerja klasik dapat bermigrasi dengan perubahan kode minimal atau tanpa perubahan. Halaman ini berfokus pada beban kerja tersebut. Beberapa fitur, seperti df.cache, belum didukung pada tanpa server, tetapi tidak akan memerlukan perubahan kode setelah tersedia. Beban kerja tertentu yang bergantung pada notebook R atau Scala memerlukan komputasi klasik dan tidak akan dapat bermigrasi ke tanpa server. Untuk daftar lengkap batasan saat ini, lihat Batasan komputasi tanpa server.

Langkah-langkah migrasi

Untuk memigrasikan beban kerja Anda dari komputasi klasik ke komputasi tanpa server, ikuti langkah-langkah berikut:

  1. Periksa prasyarat: Verifikasi bahwa ruang kerja, jaringan, dan akses penyimpanan cloud Anda memenuhi persyaratan. Lihat Sebelum Anda mulai.
  2. Kode pembaruan: Buat perubahan kode dan konfigurasi yang diperlukan. Lihat Memperbarui kode Anda.
  3. Uji beban kerja Anda: Validasi kompatibilitas dan keakuratan sebelum beralih. Lihat Menguji beban kerja Anda.
  4. Pilih mode performa: Pilih mode performa yang paling sesuai dengan persyaratan beban kerja Anda. Lihat Memilih mode performa.
  5. Bermigrasi secara bertahap: Meluncurkan tanpa server secara bertahap, dimulai dengan beban kerja baru dan berisiko rendah. Lihat Bermigrasi secara bertahap.
  6. Memantau biaya: Melacak konsumsi DBU tanpa server dan menyiapkan pemberitahuan. Lihat Pemantauan biaya.

Sebelum Anda mulai

Sebelum mulai bermigrasi, Anda mungkin perlu memperbarui beberapa konfigurasi warisan di ruang kerja Anda.

Prasyarat Action Rincian
Ruang kerja telah diaktifkan untuk Katalog Unity Bermigrasi dari Apache Hive Metastore jika diperlukan Mutakhirkan ruang kerja Azure Databricks ke Unity Catalog
Jaringan telah dikonfigurasi Ganti peering VPC dengan aturan NCC, Private Link, atau firewall Jaringan sarana komputasi tanpa server
Akses penyimpanan cloud Ganti pola akses data lama dengan lokasi eksternal Katalog Unity Menyambungkan ke penyimpanan objek cloud menggunakan Katalog Unity

Konfirmasikan ruang kerja Anda berada di wilayah yang didukung.

Memperbarui kode Anda

Bagian berikut mencantumkan kode dan perubahan konfigurasi yang diperlukan untuk membuat beban kerja Anda kompatibel dengan tanpa server.

Akses data

Pola akses data legacy tidak didukung pada serverless. Perbarui kode Anda untuk menggunakan Katalog Unity sebagai gantinya.

Pola klasik Penggantian tanpa server Rincian
Jalur DBFS (dbfs:/...) Katalog Volume Unity Apa yang dimaksud dengan volume pada Katalog Unity?
Tabel Metastore Apache Hive Tabel Katalog Unity (atau Federasi HMS) Mutakhirkan ruang kerja Azure Databricks ke Unity Catalog
Kredensial akun penyimpanan Lokasi eksternal Katalog Unity Menyambungkan ke penyimpanan objek cloud menggunakan Katalog Unity
Kustom JAR JDBC Federasi Lakehouse Apa itu federasi kueri?

Peringatan

Akses DBFS terbatas pada tanpa server. Perbarui semua jalur dbfs:/ ke volume Katalog Unity sebelum melakukan migrasi. Untuk informasi selengkapnya, lihat Memigrasikan file yang disimpan di DBFS.

Contoh: Ganti jalur DBFS dan referensi 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

API dan kode

API dan pola kode tertentu tidak didukung pada tanpa server. Referensikan tabel ini untuk melihat apakah kode Anda perlu diperbarui.

Pola klasik Penggantian tanpa server Rincian
API RDD (sc.parallelize, rdd.map) API DataFrame Membandingkan Spark Connect dengan Spark Classic
df.cache(), df.persist() Menghapus panggilan cache Batasan komputasi tanpa server
spark.sparkContext, sqlContext Gunakan spark (SparkSession) secara langsung Membandingkan Spark Connect dengan Spark Classic
Variabel Hive (${var}) SQL DECLARE VARIABLE atau Python f-strings DECLARE VARIABLE
Konfigurasi Spark yang tidak didukung Hapus konfigurasi yang tidak didukung. Serverless secara otomatis menyetel dan mengoptimalkan sebagian besar pengaturan. Mengonfigurasi properti Spark untuk buku catatan dan pekerjaan tanpa server
Contoh: Ganti operasi RDD dengan 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")
Contoh: Ganti SparkContext dan caching
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")

Pustaka dan lingkungan

Anda dapat mengelola pustaka dan lingkungan di tingkat ruang kerja menggunakan lingkungan dasar dan pada tingkat buku catatan menggunakan lingkungan tanpa server milik buku catatan.

Pola klasik Penggantian tanpa server Rincian
Skrip Inisialisasi Lingkungan tanpa server Mengonfigurasi lingkungan tanpa server
Pustaka cakupan kluster Pustaka lingkup notebook atau lingkungan Mengonfigurasi lingkungan tanpa server
Pustaka Maven dan JAR Dukungan tugas JAR untuk pekerjaan; PyPI untuk buku catatan Tugas JAR untuk pekerjaan
Kontainer Docker Lingkungan tanpa server untuk kebutuhan pustaka Mengonfigurasi lingkungan tanpa server

Sematkan paket Python di requirements.txt untuk lingkungan yang dapat direproduksi. Lihat versi paket Specify Python.

Siaran Langsung

Beban kerja streaming didukung pada platform serverless, tetapi pemicu tertentu tidak didukung. Perbarui kode Anda untuk menggunakan pemicu yang didukung.

Pemicu Spark Dukungan Catatan
Trigger.AvailableNow() Yes Recommended
Trigger.Once() Yes Ini tidak digunakan lagi. Gunakan Trigger.AvailableNow() sebagai gantinya.
Trigger.ProcessingTime(interval) No Mengembalikan INFINITE_STREAMING_TRIGGER_NOT_SUPPORTED
Trigger.Continuous(interval) No Gunakan mode terus-menerus pada Lakeflow Spark Declarative Pipelines
Default (tanpa pengaturan .trigger()) No Menghilangkan .trigger() akan default ke ProcessingTime("0 seconds"), yang tidak didukung pada lingkungan serverless. Selalu atur .trigger(availableNow=True) secara eksplisit.

Untuk streaming berkelanjutan, migrasikan ke Spark Declarative Pipelines dalam mode berkelanjutan atau gunakan pekerjaan jadwal berkelanjutan dengan AvailableNow. Untuk sumber besar, atur maxFilesPerTrigger atau maxBytesPerTrigger untuk mencegah kesalahan di luar memori.

Contoh: Memperbaiki pemicu 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))

Menguji beban kerja Anda

  1. Uji kompatibilitas cepat: Jalankan beban kerja pada komputasi klasik dengan mode akses Standar dan Databricks Runtime 14.3 atau lebih tinggi. Jika eksekusi berhasil, beban kerja dapat bermigrasi ke tanpa server tanpa perubahan kode apa pun.
  2. Perbandingan A/B (disarankan untuk produksi): Jalankan beban kerja yang sama pada klasik (kontrol) dan tanpa server (eksperimen). Tabel keluaran diff dan pastikan koreksiannya. Ulangi hingga hasil sesuai.
  3. Konfigurasi sementara: Anda dapat mengatur konfigurasi Spark yang didukung untuk sementara waktu selama pengujian. Hapus mereka setelah stabil.

Pilih mode performa

Pekerjaan dan alur tanpa server mendukung dua mode performa: standar dan dioptimalkan performa. Mode performa yang Anda pilih tergantung pada persyaratan beban kerja Anda.

Modus Availability Perusahaan rintisan Paling cocok untuk
Standar Pekerjaan, Alur Deklaratif Lakeflow Spark 4-6 menit Batch yang sensitif terhadap biaya
Dioptimalkan performa Notebook, Pekerjaan, Alur Deklaratif Lakeflow Spark Detik Interaktif, sensitif terhadap latensi

Bermigrasi secara bertahap

  1. Beban kerja baru: Mulai semua buku catatan dan pekerjaan baru tanpa server.
  2. Beban kerja berisiko rendah: Memigrasikan beban kerja PySpark/SQL yang sudah ada pada mode akses standar dan Databricks Runtime 14.3 atau lebih tinggi.
  3. Beban kerja yang kompleks: Memigrasikan beban kerja yang memerlukan perubahan kode (penulisan ulang RDD, pembaruan DBFS, perbaikan pemicu).
  4. Beban kerja yang tersisa: Tinjau secara berkala saat kemampuan diperluas.

Memantau biaya

Penagihan tanpa server didasarkan pada konsumsi DBU, bukan waktu aktif kluster. Validasi ekspektasi biaya dengan beban kerja representatif sebelum bermigrasi dalam skala besar. Untuk alat dan strategi untuk memantau biaya tanpa server, lihat Memantau biaya komputasi tanpa server.

Sumber daya tambahan

Anda juga dapat merujuk ke posting blog berikut untuk informasi selengkapnya: