Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İş 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:
- Ö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.
- Kodu güncelleştirme: Gerekli kod ve yapılandırma değişikliklerini yapın. Bkz . Kodunuzu güncelleştirme.
- İş yüklerinizi test edin: Geçiş yapmadan önce uyumluluğu ve doğruluğu doğrulayın. Bkz . İş yüklerinizi test edin.
- Bir performans modu seçin: İş yükü gereksinimlerinize en uygun performans modunu seçin. Bkz. Performans modu seçme.
- 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ş.
- 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
- 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.
- 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.
- 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ş
- Yeni iş yükleri: Tüm yeni not defterlerini ve işleri sunucusuz olarak başlatın.
- 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.
- 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).
- 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
- Sunucusuz işlem için en iyi yöntemler: Sunucusuz iş yükleri için iyileştirme ipuçları
- Sunucusuz işlem sınırlamaları: Geçerli sınırlamaların ve desteklenmeyen özelliklerin tam listesi
- Sunucusuz ortamı yapılandırma: Kitaplıkları ve bağımlılıkları yönetme
- Desteklenen Spark yapılandırmaları: Sunucusuz üzerinde kullanılabilir Spark yapılandırmaları
- Spark Connect ve klasik Spark: Sunucusuz mimarideki davranış farklılıkları
- Sunucusuz ağ güvenliği: NCC'ler, Özel Bağlantı ve güvenlik duvarı yapılandırması
- Sunucusuz işlem sürüm notları: Yeni özellikler gönderildikçe izleyin
- Unity Kataloğu yükseltme kılavuzu: Hive Meta Veri Deposundan Unity Kataloğu'na geçiş
Daha fazla bilgi için aşağıdaki blog gönderilerine de başvurabilirsiniz:
- Sunucusuz bilgi işlem nedir?: Sunucusuz özelliklere ve müşteri sonuçlarına genel bakış
- Veri mühendisliğinin gelişimi: Sunucusuz işlem not defterlerini ve Lakeflow işlerini nasıl dönüştürüyor: Sunucusuz, Lakeflow İşleri ve İşlem Hatlarını nasıl destekler?