Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
- Periksa prasyarat: Verifikasi bahwa ruang kerja, jaringan, dan akses penyimpanan cloud Anda memenuhi persyaratan. Lihat Sebelum Anda mulai.
- Kode pembaruan: Buat perubahan kode dan konfigurasi yang diperlukan. Lihat Memperbarui kode Anda.
- Uji beban kerja Anda: Validasi kompatibilitas dan keakuratan sebelum beralih. Lihat Menguji beban kerja Anda.
- Pilih mode performa: Pilih mode performa yang paling sesuai dengan persyaratan beban kerja Anda. Lihat Memilih mode performa.
- Bermigrasi secara bertahap: Meluncurkan tanpa server secara bertahap, dimulai dengan beban kerja baru dan berisiko rendah. Lihat Bermigrasi secara bertahap.
- 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
- 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.
- 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.
- 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
- Beban kerja baru: Mulai semua buku catatan dan pekerjaan baru tanpa server.
- Beban kerja berisiko rendah: Memigrasikan beban kerja PySpark/SQL yang sudah ada pada mode akses standar dan Databricks Runtime 14.3 atau lebih tinggi.
- Beban kerja yang kompleks: Memigrasikan beban kerja yang memerlukan perubahan kode (penulisan ulang RDD, pembaruan DBFS, perbaikan pemicu).
- 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
- Praktik terbaik untuk komputasi tanpa server: Tips pengoptimalan untuk beban kerja tanpa server
- Batasan komputasi tanpa server: Daftar lengkap batasan saat ini dan fitur yang tidak didukung
- Mengonfigurasi lingkungan tanpa server: Mengelola pustaka dan dependensi
- Konfigurasi Spark yang didukung: Konfigurasi Spark tersedia tanpa server
- Spark Connect vs. Spark klasik: Perbedaan perilaku dalam arsitektur tanpa server
- keamanan jaringan Serverless: konfigurasi NCC, Private Link, dan firewall
- Catatan rilis komputasi tanpa server: Lacak kemampuan baru saat dikirim
- Panduan peningkatan Katalog Unity: Migrasi dari Metastore Apache Hive ke Katalog Unity
Anda juga dapat merujuk ke posting blog berikut untuk informasi selengkapnya:
- Apa itu komputasi tanpa server?: Gambaran umum kemampuan tanpa server dan hasil pelanggan
- Evolusi rekayasa data: Bagaimana komputasi tanpa server mengubah buku catatan dan pekerjaan Lakeflow: Cara tanpa server mendukung Pekerjaan dan Alur Lakeflow