다음을 통해 공유


Azure Databricks와 OneLake 통합

이 문서에서는 Azure Databricks 서버리스 컴퓨팅을 통해 OneLake에 연결하는 방법을 보여 줍니다.

필수 조건

연결하기 전에 다음이 있는지 확인합니다.

  • Fabric 작업 영역 및 레이크하우스
  • 프리미엄 Azure Databricks 작업 영역
  • 적어도 기여자 작업 영역 역할 할당이 있는 서비스 주체입니다.
  • 비밀을 저장하고 검색하기 위해 데이터베이스 비밀 또는 Azure Key Vault(AKV)를 사용하세요. 이 예제에서는 Databricks 비밀을 사용합니다.

Databricks 서버리스 컴퓨팅을 사용하여 OneLake에 연결

Databricks 서버리스 컴퓨팅을 사용하면 클러스터를 프로비전하지 않고도 워크로드를 실행할 수 있습니다. Databricks 서버리스 설명서에 따르면 서버리스 컴퓨팅에서 Spark의 구성을 자동화하기 위해 Databricks 서버리스에서는 지원되는 Spark 속성의 하위 집합만 구성할 수 있습니다.

참고 항목

이 제한은 Azure Databricks에 고유하지 않습니다. AWS(Amazon Web Services)Google Cloud의 Databricks 서버리스 구현은 동일한 동작을 나타냅니다.

Databricks 서버리스 컴퓨팅에 연결된 Notebook에서 지원되지 않는 Spark 구성을 수정하거나 설정하려고 하면 시스템에서 CONFIG_NOT_AVAILABLE 오류를 반환합니다.

사용자가 서버리스 컴퓨팅에서 지원되지 않는 Spark 구성을 수정하려고 시도하는 경우 오류 메시지를 보여 주는 스크린샷

OneLake는 Databricks 서버리스 컴퓨팅에서 인바운드 연결을 지원합니다. 적절한 액세스 권한이 있고 Databricks 서버리스 컴퓨팅과 OneLake 사이에 네트워크 경로가 있는 경우 Databricks 서버리스 컴퓨팅에서 OneLake에 연결할 수 있습니다. Databricks 서버리스를 사용하면 코드에서 지원되지 않는 Spark 속성을 수정하지 않는지 확인합니다.

Notebook 작성

  1. Databricks 작업 영역에서 Notebook을 만들고 서버리스 컴퓨팅에 연결합니다.

    Databricks Notebook을 서버리스 컴퓨팅과 연결하는 방법을 보여 주는 스크린샷

  2. Python 모듈 가져오기 - 이 샘플에서는 다음 세 가지 모듈을 사용합니다.

    • msal 은 MSAL(Microsoft 인증 라이브러리)이며 개발자가 Microsoft ID 플랫폼 인증을 애플리케이션에 통합할 수 있도록 설계되었습니다.
    • 요청 모듈은 Python을 사용하여 HTTP 요청을 만드는 데 사용됩니다.
    • delta Lake 는 Python을 사용하여 Delta Lake 테이블을 읽고 쓰는 데 사용됩니다.
    from msal import ConfidentialClientApplication
    import requests
    from deltalake import DeltaTable
    
  3. 애플리케이션 ID를 포함하여 Microsoft Entra 테넌트에 대한 변수를 선언합니다. Microsoft Fabric이 배포된 테넌트의 테넌트 ID를 사용합니다.

    # 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. 패브릭 작업 영역 변수를 선언합니다.

    workspace_id = "<replace with workspace name>"
    lakehouse_id = "<replace with lakehouse name>"
    table_to_read = "<name of lakehouse table to read>"
    storage_account_name = workspace_id
    onelake_uri = f"abfss://{workspace_id}@onelake.dfs.fabric.microsoft.com/{lakehouse_id}.lakehouse/Tables/{table_to_read}"
    
  5. 토큰을 획득하도록 클라이언트를 초기화합니다.

    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:
       access_token = result["access_token"]
       print("Access token acquired.")
       token_val = result['access_token']
    
  6. OneLake에서 델타 테이블 읽기

    dt = DeltaTable(onelake_uri, storage_options={"bearer_token": f"{token_val}", "use_fabric_endpoint": "true"})
    df = dt.to_pandas()
    print(df.head())
    

    참고 항목

    서비스 주체에는 기여자 작업 영역 역할 할당이 있으며 이를 사용하여 OneLake에 데이터를 다시 쓸 수 있습니다.

이전 단계를 완료한 후에는 서버리스 컴퓨팅에 연결된 Notebook Databricks를 사용하여 OneLake에서 데이터를 읽을 수 있습니다.