Klasik işlemden sunucusuz işlemlere geçiş

İş yüklerinizi klasik işlemden sunucusuz işlemlere geçirin. Sunucusuz işlem sağlamayı, ölçeklendirmeyi, çalışma zamanı yükseltmelerini ve iyileştirmeyi otomatik olarak işler.

Çoğu klasik iş yükü en az kod değişikliğiyle veya hiç değişiklik olmadan geçiş yapabilir. Bu sayfa bu iş yüklerine odaklanır. gibi df.cachebazı özellikler sunucusuz olarak henüz desteklenmez, ancak kullanılabilir olduğunda kod değişikliği gerektirmez. R veya Scala not defterlerine bağımlı olan bazı iş yükleri klasik işlem gerektirir ve sunucusuz duruma geçirilemez. Geçerli sınırlamaların tam listesi için bkz. Sunucusuz işlem sınırlamaları.

Göç Adımları

İş yüklerinizi klasik işlemden sunucusuz işleme geçirmek için şu adımları izleyin:

  1. Önkoşulları denetleyin: Çalışma alanı, ağ ve bulut depolama erişiminizin gereksinimleri karşılayıp karşılamadığını doğrulayın. Başlamadan önce bkz.
  2. Kodu güncelleştirme: Gerekli kod ve yapılandırma değişikliklerini yapın. Bkz . Kodunuzu güncelleştirme.
  3. İş yüklerinizi test edin: Geçiş yapmadan önce uyumluluğu ve doğruluğu doğrulayın. Bkz . İş yüklerinizi test edin.
  4. Bir performans modu seçin: İş yükü gereksinimlerinize en uygun performans modunu seçin. Bkz. Performans modu seçme.
  5. Aşamalar halinde geçiş: Yeni ve düşük riskli iş yüklerinden başlayarak sunucusuz artımlı olarak kullanıma sunma. Bkz . Aşamalar halinde geçiş.
  6. Maliyetleri izleme: Sunucusuz DBU tüketimini izleyin ve uyarıları ayarlayın. Bkz. Maliyetleri izleme.

Başlamadan önce

Geçişe başlamadan önce çalışma alanınızdaki bazı eski yapılandırmaları güncelleştirmeniz gerekebilir.

Ön koşul Eylem Ayrıntılar
Unity Kataloğu için çalışma alanı etkinleştirildi Gerekirse Hive Meta Veri Deposundan geçiş Azure Databricks çalışma alanını Unity Kataloğu'na yükseltin
Ağ yapılandırıldı VPC peering'i NCC'ler, Özel Bağlantı veya güvenlik duvarı kurallarıyla değiştirme Sunucusuz işlem düzlemi ağı
Bulut depolama erişimi Eski veri erişim desenlerini Unity Kataloğu dış konumlarıyla değiştirme Unity Kataloğu'nu kullanarak bulut nesne depolamasına bağlanma

Çalışma alanınızın desteklenen bir bölgede olduğunu onaylayın.

Kodunuzu güncelleştirme

Aşağıdaki bölümlerde iş yüklerinizi sunucusuz ile uyumlu hale getirmek için gereken kod ve yapılandırma değişiklikleri listelenmiştir.

Veri erişimi

Eski veri erişim desenleri sunucusuz olarak desteklenmez. Bunun yerine unity kataloğunu kullanmak için kodunuzu güncelleştirin.

Klasik desen Sunucusuz değiştirme Ayrıntılar
DBFS yolları (dbfs:/...) Unity Kataloğu hacimleri Unity Kataloğu birimleri nelerdir?
Hive Meta Veri Deposu tabloları Unity Kataloğu tabloları (veya HMS Federasyonu) Azure Databricks çalışma alanını Unity Kataloğu'na yükseltin
Depolama hesabı kimlik bilgileri Unity Kataloğu dış konumları Unity Kataloğu'nu kullanarak bulut nesne depolamasına bağlanma
Özel JDBC JAR'leri Lakehouse Federasyonu Sorgu federasyonu nedir?

Uyarı

DBFS erişimi sunucusuz olarak sınırlıdır. Tüm dbfs:/ yollarını Unity Catalog birimlerine geçirmeden önce güncelleyin. Daha fazla bilgi için DBFS'de depolanan dosyaları geçirme başlığına bakın.

Örnek: DBFS yollarını ve Hive Metastore referanslarını değiştir
# 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'ler ve kod

Belirli API'ler ve kod desenleri sunucusuz olarak desteklenmez. Kodunuzun güncelleştirilmesi gerekip gerekmediğini görmek için bu tabloya başvurun.

Klasik desen Sunucusuz değiştirme Ayrıntılar
RDD API'leri (sc.parallelize, rdd.map) DataFrame API'leri Spark Connect'i Spark Klasik ile karşılaştırma
df.cache(), df.persist() Önbelleğe alma çağrılarını kaldırma Sunucusuz işlem sınırlamaları
spark.sparkContext, sqlContext spark (SparkSession) doğrudan kullan Spark Connect'i Spark Klasik ile karşılaştırma
Hive değişkenleri (${var}) SQL DECLARE VARIABLE veya Python f-strings DECLARE VARIABLE
Desteklenmeyen Spark yapılandırmaları Desteklenmeyen yapılandırmaları kaldırın. Sunucusuz, çoğu ayarı otomatik ayarlar. Sunucusuz not defterleri ve işler için Spark özelliklerini yapılandırma
Örnek: RDD işlemlerini DataFrames ile değiştirme
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")
Örnek: SparkContext'i değiştirme ve önbelleğe alma
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")

Kitaplıklar ve ortamlar

Kitaplıkları ve ortamları , temel ortamları kullanarak çalışma alanı düzeyinde ve not defterinin sunucusuz ortamını kullanarak not defteri düzeyinde yönetebilirsiniz.

Klasik desen Sunucusuz değiştirme Ayrıntılar
Başlangıç scriptleri Sunucusuz ortamlar Sunucusuz ortamı yapılandırma
Küme kapsamlı kitaplıklar Not defteri kapsamındaki veya ortam kitaplıkları Sunucusuz ortamı yapılandırma
Maven/JAR kitaplıkları İşler için JAR görev desteği; Not defterleri için PyPI İşler için JAR işlemi
Docker kapsayıcıları Kitaplık gereksinimleri için sunucusuz ortamlar Sunucusuz ortamı yapılandırma

Yeniden üretilebilir ortamlar için Python paketlerini requirements.txt sabit olarak belirleyin. Bkz. Specify Python package versions.

Yayın

Akış iş yükleri sunucusuz olarak desteklenir, ancak bazı tetikleyiciler desteklenmez. Desteklenen tetikleyicileri kullanmak için kodunuzu güncelleştirin.

Spark tetikleyicisi Destekleniyor Notlar
Trigger.AvailableNow() Evet Önerilir
Trigger.Once() Evet Bu, artık önerilmemektedir. Bunun yerine Trigger.AvailableNow() kullanın.
Trigger.ProcessingTime(interval) Hayır Döndürür INFINITE_STREAMING_TRIGGER_NOT_SUPPORTED
Trigger.Continuous(interval) Hayır Bunun yerine Lakeflow işlem hatlarının sürekli modunu kullanın
Varsayılan (ayar .trigger()değil) Hayır .trigger() atlandığında, varsayılan olarak ProcessingTime("0 seconds") olur ve bu sunucusuz ortamda desteklenmez. .trigger(availableNow=True) her zaman açık şekilde ayarlayın.

Sürekli akış için, sürekli modda Spark Bildirimli İşlem Hatları'na geçin veya ile AvailableNow kullanın. Büyük kaynaklar için, bellek yetersiz hatalarını önlemek üzere maxFilesPerTrigger veya maxBytesPerTrigger ayarlayın.

Örnek: Akış tetikleyicilerini düzeltme
# 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))

İş yüklerinizi test edin

  1. Hızlı uyumluluk testi: Standart erişim modu ve Databricks Runtime 14.3 veya üzeri ile iş yükünü klasik işlem üzerinde çalıştırın. Çalıştırma başarılı olursa, iş yükü herhangi bir kod değişikliği olmadan sunucusuz'a geçiş yapabilir.
  2. A/B karşılaştırması (üretim için önerilir): Aynı iş yükünü klasik (denetim) ve sunucusuz (deneme) üzerinde çalıştırın. Çıktı tablolarını karşılaştırın ve doğruluğunu kontrol edin. Çıkışlar eşleşene kadar yinele.
  3. Geçici yapılandırmalar: Test sırasında desteklenen Spark yapılandırmalarını geçici olarak ayarlayabilirsiniz. Kararlı hale geldikten sonra bunları kaldırın.

Performans modu seçme

Sunucusuz işler ve işlem hatları iki performans modunu destekler: standart ve performans için iyileştirilmiş. Seçtiğiniz performans modu iş yükü gereksinimlerinize bağlıdır.

Mode Availability Başlangıç En iyi kullanım alanı:
Standart İşler, Lakeflow işlem hatları 4-6 dakika Maliyete duyarlı toplu iş
Performansa optimize edilmiş Not Defterleri, İşler, Lakeflow işlem hatları Saniye Etkileşimli, gecikme süresine duyarlı

Aşamalar halinde geçiş

  1. Yeni iş yükleri: Tüm yeni not defterlerini ve işleri sunucusuz olarak başlatın.
  2. Düşük riskli iş yükleri: Zaten standart erişim modunda ve Databricks Runtime 14.3 veya üzerinde olan PySpark/SQL iş yüklerini geçirin.
  3. Karmaşık iş yükleri: Kod değişikliklerine ihtiyaç duyan iş yüklerini geçirin (RDD yeniden yazma işlemleri, DBFS güncelleştirmeleri, tetikleyici düzeltmeleri).
  4. Kalan iş yükleri: Özellikler genişledikçe düzenli aralıklarla gözden geçirin.

Maliyetleri izleme

Sunucusuz faturalama, küme çalışma süresini değil DBU tüketimini temel alır. Büyük ölçekli geçiş öncesinde, temsilci iş yükleriyle maliyet beklentilerini doğrulayın. Sunucusuz maliyetleri izlemeye yönelik araçlar ve stratejiler için bkz. Sunucusuz işlem maliyetini izleme.

Ek kaynaklar

Daha fazla bilgi için aşağıdaki blog gönderilerine de başvurabilirsiniz: