OneLake'i Azure Databricks ile tümleştirme

Bu makalede, Azure Databricks'dan OneLake verilerine erişme gösterilmektedir. Her iki yaklaşımda da hizmet sorumlusu kimlik doğrulaması ve OneLake ABFS uç noktası kullanılır. Databricks işlem türünüzle eşleşen bölümü seçin:

  • Standart veya iş kümesi: Verileri doğrudan Spark DataFrames aracılığıyla okumak ve yazmak için Spark ABFS sürücüsünü OAuth yapılandırmasıyla kullanın.
  • Sunucusuz işlem: Sunucusuz çalışma zamanları özel Spark yapılandırma özelliklerini ayarlamanıza izin vermez. Bunun yerine, Delta tablolarının kimliğini doğrulamak ve okumak veya yazmak için Microsoft Authentication Library (MSAL) ve Python deltalake kitaplığını kullanın.

İlgili Databricks tümleştirme senaryoları için aşağıdaki kaynaklara bakın:

Scenario Dokümantasyon
OneLake verilerini kopyalamadan Unity Kataloğu'ndan sorgulama OneLake katalog federasyonunu etkinleştirme
Fabric'dan Databricks Unity Kataloğu verilerine erişme Azure Databricks Unity Kataloğunu Yansıtma

Önkoşullar

Bağlanmadan önce şunları yaptığınızdan emin olun:

  • Fabric çalışma alanı ve Lakehouse.
  • Premium bir Azure Databricks çalışma alanı.
  • En azından Katkıda Bulunan çalışma alanı rol ataması olan bir hizmet sorumlusu.
  • Databricks sırlarını veya Azure Key Vault (AKV) sırlarını depolamak ve almak için. Bu makaledeki örneklerde Databricks gizli bilgiler kullanılır.

Standart kümeyle OneLake'e bağlanma

Doğru OneLake ABFS yol biçimini kullanma

Aşağıdaki URI biçimlerinden birini kullanın:

  • abfss://<workspace_id_or_name>@onelake.dfs.fabric.microsoft.com/<lakehouse_id_or_name>.lakehouse/Files/<path>
  • abfss://<workspace_id_or_name>@onelake.dfs.fabric.microsoft.com/<lakehouse_id_or_name>.lakehouse/Tables/<path>

Kimlikleri veya adları kullanabilirsiniz. Ad kullanıyorsanız, çalışma alanı ve göl evi adlarında özel karakterlerden ve boşluklardan kaçının.

Hizmet sorumlusu kimlik doğrulamayı kullanma

Otomatikleştirilmiş işler ve merkezi gizli dizi döndürme için bu seçeneği kullanın.

workspace_name = "<workspace_name>"
lakehouse_name = "<lakehouse_name>"
tenant_id = dbutils.secrets.get(scope="<scope-name>", key="<tenant-id-key>")
service_principal_id = dbutils.secrets.get(scope="<scope-name>", key="<client-id-key>")
service_principal_secret = dbutils.secrets.get(scope="<scope-name>", key="<client-secret-key>")

spark.conf.set("fs.azure.account.auth.type", "OAuth")
spark.conf.set(
   "fs.azure.account.oauth.provider.type",
   "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
)
spark.conf.set("fs.azure.account.oauth2.client.id", service_principal_id)
spark.conf.set("fs.azure.account.oauth2.client.secret", service_principal_secret)
spark.conf.set(
   "fs.azure.account.oauth2.client.endpoint",
   f"https://login.microsoftonline.com/{tenant_id}/oauth2/token",
)

# Read
df = spark.read.format("parquet").load(
   f"abfss://{workspace_name}@onelake.dfs.fabric.microsoft.com/{lakehouse_name}.lakehouse/Files/data"
)
df.show(10)

# Write
df.write.format("delta").mode("overwrite").save(
   f"abfss://{workspace_name}@onelake.dfs.fabric.microsoft.com/{lakehouse_name}.lakehouse/Tables/dbx_delta_spn"
)

Sunucusuz işlem ile OneLake'e bağlanma

Databricks sunucusuz işlem , bir küme sağlamadan iş yüklerini çalıştırmanıza olanak tanır, ancak yalnızca desteklenen Spark özelliklerinin bir alt kümesine izin verir. Standart kümelerde kullanılan Spark yapılandırmasını ayarlayamazsınız fs.azure.* .

Uyarı

Bu sınırlama Azure Databricks için benzersiz değildir. Amazon Web Services (AWS) ve Google Cloud'daki Databricks sunucusuz uygulamaları aynı davranışa sahiptir.

Sunucusuz bir not defterinde desteklenmeyen bir Spark yapılandırması ayarlamaya çalışırsanız sistem CONFIG_NOT_AVAILABLE hatası döndürür.

Bir kullanıcı sunucusuz işlemde desteklenmeyen Spark yapılandırmasını değiştirmeye çalışırsa hata iletisini gösteren ekran görüntüsü.

Bunun yerine, OAuth belirtecini almak için MSAL'yi ve bu belirteçle Delta tablolarını okumak veya yazmak için Python deltalake kitaplığını kullanın.

Sunucusuz not defteri ayarlama

  1. Databricks çalışma alanınızda bir not defteri oluşturun ve bunu sunucusuz işlem alanına ekleyin.

    Databricks not defterini sunucusuz işlemle bağlamayı gösteren ekran görüntüsü.

  2. Python modüllerini içeri aktar. Bu örnekte iki modül kullanın:

    • msal Microsoft kimlik platformu kimlik doğrulaması yapar.
    • deltalake Delta Lake tablolarını Python okur ve yazar.
    from msal import ConfidentialClientApplication
    from deltalake import DeltaTable, write_deltalake
    
  3. Uygulama kimliği de dahil olmak üzere Microsoft Entra kiracısı için değişkenleri bildirin. Fabric'in dağıtıldığı kiracının kiracı kimliğini kullanın.

    # Fetch from Databricks secrets.
    tenant_id = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for tenant_id>")
    client_id = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for client_id>")
    client_secret = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for secret>")
    
  4. Fabric çalışma alanı değişkenlerini bildirin.

    workspace_id = "<replace with workspace name>"
    lakehouse_id = "<replace with lakehouse name>"
    table_to_read = "<name of lakehouse table to read>"
    onelake_uri = f"abfss://{workspace_id}@onelake.dfs.fabric.microsoft.com/{lakehouse_id}.lakehouse/Tables/{table_to_read}"
    
  5. Token elde etmek için istemciyi başlatın.

    authority = f"https://login.microsoftonline.com/{tenant_id}"
    
    app = ConfidentialClientApplication(
        client_id,
        authority=authority,
        client_credential=client_secret
    )
    
    result = app.acquire_token_for_client(scopes=["https://onelake.fabric.microsoft.com/.default"])
    
    if "access_token" in result:
        print("Access token acquired.")
        token_val = result['access_token']
    else:
        raise Exception(f"Failed to acquire token: {result.get('error_description', result)}")
    
  6. OneLake'den bir Delta tablosu okuyun.

    dt = DeltaTable(onelake_uri, storage_options={"bearer_token": f"{token_val}", "use_fabric_endpoint": "true"})
    df = dt.to_pandas()
    print(df.head())
    
  7. OneLake'e bir Delta tablosu yazın.

    target_uri = f"abfss://{workspace_id}@onelake.dfs.fabric.microsoft.com/{lakehouse_id}.lakehouse/Tables/<target_table_name>"
    write_deltalake(
        target_uri,
        df,
        mode="overwrite",
        storage_options={"bearer_token": f"{token_val}", "use_fabric_endpoint": "true"}
    )
    

Tasarımla ilgili dikkat edilecek noktalar

  • Mümkün olduğunda tablo yolu başına bir yazıcı deseni kullanın. Birden çok işlem altyapısından veya çalışma zamanı sürümünden aynı depolama yollarına yazmak çakışmalara neden olabilir.
  • Hizmet sorumlusu kimlik bilgileri için gizlilik yönetimini kullanın.
  • Verileri başka bir göl evi konumuna fiziksel olarak yazmak yerine sanallaştırılmış erişime ihtiyacınız olduğunda OneLake kısayollarını kullanın.
  • OneLake'e açık ağ erişimini sınırlamak için, Databricks erişim bağlayıcınızın kaynak kimliğini çalışma alanının Kaynak Örneği Kuralları'na ekleyin, böylece OneLake her istekte yönetilen kimliğini doğrulayabilsin.