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öç ajanı ile göç edin

Important

Bu özellik Beta sürümündedir. İş alanı yöneticileri, Compute Agent önizlemesine geçerek önizlemeler sayfasından bunu etkinleştirebilir. Bkz. Azure Databricks önizlemelerini yönetme.

Tek bir not defterini veya işi sunucusuz hesaplamaya taşımak için bir göç ajanı kullanabilirsiniz. Ajan, iş yükünün ortamını, kütüphanelerini, Spark yapılandırmalarını, etiketlerini ve kodu inceler, ardından her değişikliği kabul edip reddetmeniz için bireysel bir öneri olarak önerir. Kabul edilen değişiklikler yerinde uygulanır ve geri alınabilir.

Temsilcinin incelediği ve değiştirdiği

Area Aracı ne yapar?
Çevre ve kütüphaneler Kitaplık kurulumlarını; %pip kurulumları, küme başlatma betikleri, işlerdeki küme kitaplıkları ve özel bir paket dizinine yönelik başvurular dahil olmak üzere sunucusuz ortam belirtimine dönüştürür.
Ortam değişkenleri Küme ortamı değişkenlerini sunucusuz eşdeğerlerine çevirir, çalışma alanı gizli referanslarını korur ve platform tarafından yönetilen değerleri çıkarır.
Veri ve depolama erişimi Yerel disk, dbfs:/ ve bağlama yolları gibi sunucusuzla uyumsuz yolları Unity Catalog birimlerine yeniden yazar. Aracı, yoruma yer bırakmayan yeniden yazımları otomatik olarak uygular ve hedefin belirsiz olduğu durumlarda sizden bir birim seçmenizi ister.
Spark yapılandırmaları Her Spark yapılandırmasını sınıflandırır, düşürülebilecek ayarları yorumlarla belirtir ve sunucusuz desteklemediği yapılandırmaları işaretler ve kaldırır. Hem küme bağlı hem de notebook içi konfigürasyonları kapsar.
İş yükü kodu Sunucusuzun desteklemediği kodu, örneğin RDD işlemlerini DataFrame işlemlerine dönüştürmek gibi, uyumlu karşılıklara yeniden yazar ve kodu sunucusuzdaki ANSI modu SQL davranışına göre ayarlar.
Tags Maliyet merkezi etiketi gibi özel küme etiketlerini, sunucusuz eşdeğerlerine çevirir.
Performans modu Küme yapılandırmasına dayalı bir performans modu önerir. Bkz. Performans modu seçme.

Requirements

  • Eksiksiz bir geçiş sağlamak için çalışma alanı yöneticisi erişimi önerilir. Bunun nedeni, ajanın hedef iş yükünün ötesinde çalışma alanı düzeyindeki küresel başlatma betiklerini de incelemesidir. İş yükünde izniniz CAN MANAGE varsa geçiş yapabilirsiniz, ancak yönetici izniniz olmadan kütüphaneler, ortam ayarları veya etiketler eksikleşebilir.

  • Ajana erişiminiz olduğunu doğrulayın. Genie Code’da /compute yazın. /compute otomatik tamamlama menüsünde görünmeli. Eğer görünmezse, bir çalışma alanı yöneticisi önizlemeyi çalışma alanınızda etkinleştirmelidir.

    /compute yazılmış Genie Code paneli; otomatik tamamlama menüsünde /compute komutunu ve “İşleri sunucusuz işlemeye taşı” açıklamasını gösteren görünüm

Bir not defterini transfer et

  1. Taşımak istediğiniz defteri açın.
  2. Genie Code'u aç ve komut paletinden / çalıştır/compute migrate to serverless.
  3. Ajanın bulgularını gözden geçirin. Ajan, notebook'un ortamını, kütüphanelerini ve kodunu tarar ve ihtiyaç duyan her öğe için bir değişiklik önerir; örneğin bir kütüphane kurulumunu bir ortam spesifikasyonuna taşımak veya bir kod hücresini sunucusuz çalıştıracak şekilde yeniden yazmak.
  4. Önerilen her değişikliği kabul edin ya da reddedin.
  5. Kabul ettiğiniz değişiklikleri uygulayın. Olduğu yerde not defterine yazılır.
  6. Notebook'u sunucusuz cihaza takın ve beklediğiniz gibi davrandığını doğrulamak için çalıştırın. Taşınmış iş yükünü doğrulama bölümünü bkz.

Bir görevi taşıma

  1. Taşınmak istediğiniz işi açın.
  2. Genie Code'u aç ve komut paletinden / çalıştır/compute migrate to serverless.
  3. Ajan işinizi klonlar ve klonlanan işi sunucusuz hale geçirmeye çalışır.
  4. Ajanın bulgularını gözden geçirin. Birden çok görev içeren bir iş için ajan, her görevi ve her göreve ait küme yapılandırmasını listeler ve işin zamanlamasını koruyarak her biri için değişiklikler önerir.
  5. Taşınma yüzeyinde önerilen her değişikliği kabul edin veya reddedin: ortam ve kütüphaneler, Spark yapılandırmaları ve değişmesi gereken iş yükü kodu.
  6. Kabul ettiğiniz değişiklikleri uygulayın. İşin hesaplama sistemi sunucusuz rejime geçiyor.
  7. İşi sunucusuz çalıştırın ve sonuçları doğrulayın. Taşınmış iş yükünü doğrulama bölümünü bkz.
  8. İsteğe bağlı olarak, son adımda aracı taşınan klonu yükseltir. Klonun yapılandırmasını ve defterlerini orijinal işinize geri kopyalıyor (aynı iş kimliği, zamanlama ve izinleri koruyarak), ardından klonu siliyor. Terfi atlayıp her iki işi de tutarsanız, çalışmadığınız işte programı duraklatın, yoksa aynı tetikleyici her ikisini de ateşler ve yazımları veya diğer yan etkileri tekrarlayabilir.

Taşınmış bir iş yükünü doğrulayın

Ajan değişiklikleri önerir ve uygular, ancak iş yükünüzü çalıştırmaz veya çıktısını doğrulamaz. Her zaman sunucusuz olarak taşınmış bir iş yükü çalıştırın ve özellikle üretim tablolarına yazan iş yükleri için güvenmeden önce sonuçları onaylayın. Eğer ajan yanlış görünen bir değişiklik önerirse, reddedin ve bize geri bildirim gönderin ki ajanı geliştirelim. Bkz Ürün geri bildirimi gönderme.

Tip

Taşınan bir iş yükünü doğrularken, performans optimize edilmiş modda çalıştırın. Standart moddan daha hızlı başlar, bu yüzden sonuçları doğrularken daha hızlı geri bildirim alırsınız. Üretimde çalıştırmadan önce iş yüküne en uygun moda geçin. Bkz. Performans modu seçme.

Ajan, güvenli bir şekilde taşıyamayacağı bir öğe bulduğunda bir engel bildirir ve varsayılan olarak işlemi durdurur. Bazı uyumluluk veya bağımlılık engellerine rağmen devam etmesi için açıkça yönerge verebilirsiniz; ancak bunu yapmak, bu bağımlılıkların, maliyet ilişkilendirmesinin veya çalışma zamanı davranışının aynen aktarılmayabileceği riskini kabul etmek anlamına gelir ve iş yükü sunucusuz ortamda başarısız olabilir.

Geçiş değişikliklerini geri al

Ajanın uyguladığı değişiklikler geri döndürülebilir.

Bir defter için, onu açın ve geçiş öncesindeki revizyonu geri getirin. Bkz . Databricks not defterlerinde sürüm geçmişi.

Bir iş için, taşınan klonu tanıtmadıysanız, orijinal işiniz hiç değişmezdi: önceki gibi çalıştırın ve klonu silin. Eğer klonu yükselttiyseniz, aracının herhangi bir değişiklik yapmadan önce oluşturduğu yedekten geri yükleyin:

  1. İş alanınızdaki evdeki yedekleme klasörünü açın: /Workspace/Users/<your-username>/serverless-migration/backups/job-<job-id>/<timestamp>/. Ajan, göç sırasında bu yolu gösterdi. Eğer birkaç zaman damgası varsa, göçten hemen önce olanı seçin.
  2. Geçiş öncesi iş ayarlarınızı içeren job.yaml öğesini açın ve bu ayarları POST /api/2.2/jobs/reset isteğiyle aynı iş için yeniden uygulayın; bu istek, sağladığınız ayarlarla işin ayarlarının üzerine yazar. Ayrıca bunları işin JSON tanımına arayüzde yapıştırabilirsiniz. Bu işi klasik hesaplamaya geri döndürüyor.
  3. Open mapping.yaml, her yedek dosyayı ve geldiği orijinal yolu listeler. Her yedekleme dosyasını orijinal yoluna geri kopyalayarak kod yeniden yazmalarını geri alın.
  4. Görevi, geçişten önce olduğu gibi davrandığını doğrulamak için çalıştırın.

Göç işlemi bu yedeklemeyi asla silmiyor. Ajanın değiştirmediği görevler, örneğin git kaynaklı, SQL veya dbt görevleri, job.yaml içinde kaydedilir ancak dosyaları yedeklemeye kopyalanmaz; bu nedenle gerekirse bunları asıl kaynağınızdan geri yükleyin.

Bilinen sınırlamalar

  • Engelleyici olarak rapor edilenler şunlardır: özel görseller, ML Çalışma Zamanı varyantları, 13'ten önceki Databricks Çalışma Zamanı sürümleri, sunucusuz sistemde güvenle görmezden gelinemeyen Spark yapılandırmaları ve yumurta, JAR ve Maven kütüphaneleri gibi bağımlılıklar. Engelleyici, ajanın o öğeyi taşımak yerine durması anlamına gelir. Ya kendiniz çözüp göçü tekrar çalıştırabilirsiniz ya da ajana yine de göç etmesini söyleyebilirsiniz, bu da o öğeyi çözmez ve sunucusuz iş yükünün başarısız olmasına neden olabilir.
  • Ajan, çalışma alanı dosyalarında veya Unity Kataloğu hacimlerinde saklanan init betiklerini okur. ABFSS veya DBFS'de depolanan init betikleri okunamaz ve engelleyici olarak rapor edilir.
  • Ajan, her klasik hesaplama özelliğini incelemez. Küme log teslimatı ve SSH anahtarları modellenmemiştir ve iş yükü kodundan birçok DBFS mount bağımlılığını tespit etse de, her mount'ı saymaz veya çözmez.
  • Önbellek ve kontrol noktası API'leri, küresel geçici görünümler, DBFS montaj yönetim çağrıları ve Scala veya R kodu varsayılan olarak sert engelleyicilerdir. Ajana devam etmesini söyleyebilirsiniz, ancak çözülmemiş işlevsellik değişmeden kalır ve sunucusuz sistemde arızalanabilir.
  • 10'dan fazla taşınabilir göreve sahip işler şu anda taşınamaz.
  • Ajan, bir iş yükünü tek tek bir kez taşır. Filo çapında keşif, toplu taşıma veya yönetici onay akışı yok.
  • Ajan, kabul ettiğiniz değişiklikleri önerir ve uygular, ancak iş yükünüzü çalıştırmaz veya çıktı doğruluğunu doğrulamaz. Üretim verileri için ona güvenmeden önce taşınmış bir iş yükünü doğrulayın.
  • Eğer iş yükünüzün gerçek kaynağı bir Databricks Asset Bundle veya bir Git klasörüyse, ajan çalışma alanı nesnesine değişiklikler uygular. Bu değişiklikleri, daha sonra yapılacak bir dağıtımın göçü ezmemesi için paketiniz veya deponuzla uyumlu hâle getirin.

Sunucusuz rejime manuel geçiş

İş 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: