OneLaken integrointi Azure Databricksiin

Tässä artikkelissa näytetään, miten pääsee käsiksi OneLake-dataan Azure Databricks:sta. Molemmat lähestymistavat käyttävät palvelupään tunnistautumista ja OneLake ABFS -päätelaitetta. Valitse osio, joka vastaa Databricks-laskentatyyppiäsi:

  • Standardi tai työryhmä: Käytä Spark ABFS -ajuria OAuth-konfiguraatiolla lukeaksesi ja kirjoittaaksesi dataa suoraan Spark DataFramesin kautta.
  • Serveritön laskenta: Palvelimettomat ajonaikat eivät salli mukautettujen Spark-konfiguraatioiden asettamista. Sen sijaan käytä Microsoft Authentication Library (MSAL) ja Python deltalake -kirjastoa Delta-taulukoiden todennukseen, lukemiseen ja kirjoittamiseen.

Databricks-integraatioskenaarioita varten katso seuraavat resurssit:

Esimerkkitilanne Dokumentaatio
Hae OneLake-tietoja Unity Catalogista kopioimatta niitä Ota OneLake-katalogin federaatio käyttöön
Pääsy Databricks Unity Catalogin tietoihin Fabric-sivustolla Azure Databricks Unity -luettelon peilaus

edellytykset

Ennen kuin yhdistät, varmista, että sinulla on:

  • Fabric-työtila ja järvitalo.
  • Azure Databricksin premium-työtila.
  • Palvelupäähenkilö, jolla on vähintään Contributor workspace -roolin määritys.
  • Databricksin salaisuudet tai Azure Key Vault (AKV) salaisuuksien tallentamiseen ja hakemiseen. Tämän artikkelin esimerkit käyttävät Databricksin salaisuuksia.

Yhdistä OneLakeen vakio-klusterilla

Käytä oikeaa OneLake ABFS -polkumuotoa

Käytä jotakin seuraavista URI-muodoista:

  • 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>

Voit käyttää henkilöllisyystodistuksia tai nimiä. Jos käytät nimiä, vältä erikoismerkkejä ja valkoisia tiloja työtiloissa ja järventalojen nimissä.

Käytä palvelun päähenkilön todennuksia

Käytä tätä vaihtoehtoa automatisoituihin tehtäviin ja keskitettyyn salaiseen rotaatioon.

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"
)

Yhdistä OneLakeen palvelimettomalla laskentatoimella

Databricksin serveriton laskenta mahdollistaa työkuormien suorittamisen ilman klusterien provisiointia, mutta sallii vain osan tuetuista Spark-ominaisuuksista. Et voi asettaa Spark-konfiguraatiota fs.azure.* , jota käytetään tavallisissa klustereissa.

Note

Tämä rajoitus ei koske vain Azure Databricksiä. Databricksin palvelimettomat toteutukset Amazon Web Servicesissä (AWS) ja Google Cloudissa käyttäytyvät samalla tavalla.

Jos yrität asettaa tuetonta Spark-konfiguraatiota palvelimettomassa muistikirjassa, järjestelmä palauttaa CONFIG_NOT_AVAILABLE-virheen.

Näyttökuva, jossa näkyy virhesanoma, jos käyttäjä yrittää muokata Spark-määritystä, jota ei tueta palvelimettomassa tietojenkäsittelyssä.

Sen sijaan käytä MSAL:ia hankkiaksesi OAuth-tokenin ja Python deltalake-kirjastoa Delta-taulukoiden lukemiseen tai kirjoittamiseen kyseisellä tokenilla.

Perusta palvelimeton muistikirja

  1. Luo muistikirja Databricks-työtilassasi ja liitä se palvelimettomaan laskentaan.

    Näyttökuva, jossa näkyy, miten Databricks-muistikirja yhdistetään palvelimettomaan tietojenkäsittelyyn.

  2. Tuo Python-moduuleja. Tässä esimerkissä käytetään kahta moduulia:

    • msal autentikoituu Microsoftin käyttäjätietoympäristö:n kanssa.
    • deltalake lukee ja kirjoittaa Delta Lake -taulukoita Python avulla.
    from msal import ConfidentialClientApplication
    from deltalake import DeltaTable, write_deltalake
    
  3. Määritä Microsoft Entra -vuokraajan muuttujat, mukaan lukien sovellustunnus. Käytä sen vuokraajan vuokraajatunnusta, jossa Microsoft Fabric on otettu käyttöö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. Määritä Fabric-työtilan muuttujat.

    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. Alusta asiakas tunnuksen hankkimiseksi.

    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. Lue OneLaken Delta-taulukko.

    dt = DeltaTable(onelake_uri, storage_options={"bearer_token": f"{token_val}", "use_fabric_endpoint": "true"})
    df = dt.to_pandas()
    print(df.head())
    
  7. Kirjoita Delta-taulukko OneLakeen.

    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"}
    )
    

Suunnittelussa huomioitavaa

  • Käytä yhtä kirjoitusmallia per taulukkopolku mahdollisuuksien mukaan. Samoille tallennuspoluille kirjoittaminen useista laskentamoottoreista tai ajonaikaisista versioista voi aiheuttaa ristiriitoja.
  • Käytä salaisuuksien hallintaa palvelupäähenkilön tunnistetietoihin.
  • Käytä OneLake-pikanäppäimiä , kun tarvitset virtualisoitua pääsyä, sen sijaan että kirjoittaisit tietoja fyysisesti toiseen lakehouse-paikkaan.
  • Käytä OneLakea Azure Databricks
  • Pilviobjektitallennuksen asentaminen Azure Databricks