다음을 통해 공유


Azure Databricks와 OneLake 통합

이 시나리오에서는 Azure Databricks를 통해 OneLake에 연결하는 방법을 보여 줍니다. 이 자습서를 완료하면 Azure Databricks 작업 영역에서 Microsoft Fabric 레이크하우스를 읽고 쓸 수 있습니다.

필수 조건

연결하려면 다음 항목이 있어야 합니다.

  • Fabric 작업 영역 및 레이크하우스
  • 프리미엄 Azure Databricks 작업 영역 프리미엄 Azure Databricks 작업 영역만 이 시나리오에 필요한 Microsoft Entra 자격 증명 통과를 지원합니다.

Databricks 작업 영역 설정

  1. Azure Databricks 작업 영역을 열고 만들기>클러스터를 선택합니다.

  2. Microsoft Entra ID를 사용하여 OneLake에 인증하려면 고급 옵션의 클러스터에서 ADLS(Azure Data Lake Storage) 자격 증명 통과를 사용하도록 설정해야 합니다.

    고급 옵션 화면에서 클러스터 만들기를 선택할 위치를 보여 주는 스크린샷

    참고 항목

    서비스 주체를 사용하여 Databricks를 OneLake에 연결할 수도 있습니다. 서비스 주체를 사용하여 Azure Databricks 인증에 대한 자세한 내용은 서비스 주체 관리를 참조하세요.

  3. 기본 설정 매개 변수를 사용하여 클러스터를 만듭니다. Databricks 클러스터 만들기에 대한 자세한 내용은 클러스터 구성 - Azure Databricks를 참조하세요.

  4. Notebook을 열고 새로 만든 클러스터에 연결합니다.

Notebook 작성

  1. Fabric 레이크하우스로 이동하여 ABFS(Azure Blob Filesystem) 경로를 레이크하우스에 복사합니다. 속성 창에서 찾을 수 있습니다.

    참고 항목

    Azure Databricks는 ADLS Gen2 및 OneLake에 읽고 쓸 때 ABFS(Azure Blob Filesystem) 드라이버만 지원합니다. abfss://myWorkspace@onelake.dfs.fabric.microsoft.com/

  2. Databricks Notebook에 레이크하우스 경로를 저장합니다. 이 레이크하우스는 나중에 처리된 데이터를 작성하는 위치입니다.

    oneLakePath = 'abfss://myWorkspace@onelake.dfs.fabric.microsoft.com/myLakehouse.lakehouse/Files/'
    
  3. Databricks 공용 데이터 세트에서 데이터 프레임으로 데이터를 로드합니다. Fabric의 다른 위치에서 파일을 읽거나 이미 소유하고 있는 다른 ADLS Gen2 계정에서 파일을 선택할 수도 있습니다.

    yellowTaxiDF = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/databricks-datasets/nyctaxi/tripdata/yellow/yellow_tripdata_2019-12.csv.gz")
    
  4. 데이터를 필터링, 변환 또는 준비합니다. 이 시나리오에서는 더 빠른 로드를 위해 데이터 세트를 트리밍하거나 다른 데이터 세트와 조인하거나 특정 결과로 필터링할 수 있습니다.

    filteredTaxiDF = yellowTaxiDF.where(yellowTaxiDF.fare_amount<4).where(yellowTaxiDF.passenger_count==4)
    display(filteredTaxiDF)
    
  5. OneLake 경로를 사용하여 필터링된 데이터 프레임을 Fabric 레이크하우스에 씁니다.

    filteredTaxiDF.write.format("csv").option("header", "true").mode("overwrite").csv(oneLakePath)
    
  6. 새로 로드된 파일을 읽어 데이터가 성공적으로 작성되었는지 테스트합니다.

    lakehouseRead = spark.read.format('csv').option("header", "true").load(oneLakePath)
    display(lakehouseRead.limit(10))
    

이렇게 하면 설정이 완료되고 이제 Azure 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 사이에 네트워크 경로가 있는 경우 OneLake(Databricks 서버리스 컴퓨팅)에 연결할 수 있습니다. Databricks 서버리스를 사용하면 코드가 지원되지 않는 Spark 속성을 수정하지 않는지 확인해야 합니다.

필수 조건

연결하려면 다음 항목이 있어야 합니다.

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

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에서 데이터를 읽을 수 있습니다.