모듈 1: Apache Spark를 사용하여 Microsoft Fabric 레이크하우스로 데이터 수집

이 모듈에서는 NYC Taxi & Limousine 위원회 - 노란색 택시 여행 데이터 세트를 수집하여 델타 레이크 형식의 패브릭 레이크하우스로 데이터 수집을 보여 줍니다.

중요

Microsoft Fabric은 현재 미리 보기로 제공됩니다. 이 정보는 릴리스되기 전에 상당히 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보와 관련하여 명시적이거나 묵시적인 어떠한 보증도 하지 않습니다.

Lakehouse: 레이크하우스는 빅 데이터 처리를 위해 Spark 엔진 및 SQL 엔진에서 사용하는 데이터 레이크를 통해 데이터베이스를 나타내는 파일, 폴더 및 테이블의 컬렉션이며 오픈 소스 델타 형식 테이블을 사용할 때 ACID 트랜잭션에 대한 향상된 기능을 포함합니다.

Delta Lake: Delta Lake는 ACID 트랜잭션, 확장 가능한 메타데이터 관리, Apache Spark에 일괄 처리 및 스트리밍 데이터 처리를 제공하는 오픈 소스 스토리지 계층입니다. Delta Lake 테이블은 ACID 트랜잭션 및 확장 가능한 메타데이터 관리를 위해 파일 기반 트랜잭션 로그를 사용하여 Parquet 데이터 파일을 확장하는 데이터 테이블 형식입니다.

다음 단계에서는 Apache Spark를 사용하여 Azure Open Datasets 컨테이너에서 데이터를 읽고 패브릭 레이크하우스 델타 테이블에 데이터를 씁니다. Azure Open Datasets는 기계 학습 솔루션에 시나리오별 기능을 추가하여 보다 정확한 모델을 만들 수 있는 큐레이팅된 공개 데이터 세트입니다. 개방형 데이터 세트는 Microsoft Azure Storage 클라우드에 있으며 Apache Spark, REST API, 데이터 팩터리 및 기타 도구를 비롯한 다양한 방법으로 액세스할 수 있습니다.

Notebook에서 팔로우

이 자습서의 각 단계에서 사용되는 python 명령/스크립트는 함께 제공되는 Notebook: 01-ingest-data-into-fabric-lakehouse-using-apache-spark.ipynb에서 찾을 수 있습니다. 실행하기 전에 레이크하우스를 Notebook에 연결 해야 합니다.

데이터 수집

  1. 이 모듈의 첫 번째 단계에서는 컨테이너에 공용 액세스 권한이 있으므로 익명을 사용하여 "azureopendatastorage" 스토리지 컨테이너에서 데이터를 읽습니다. 디렉터리를 지정하여 노란색 cab 데이터를 로드하고 연도(puYear) 및 월(puMonth)을 기준으로 데이터를 필터링합니다. 이 자습서에서는 실행 속도를 높이기 위해 수집 및 처리되는 데이터의 양을 최소화하려고 합니다. 데이터에 대한 자세한 내용은 NYC Taxi & Limousine 위원회 - 노란색 택시 여행 데이터 세트를 참조하세요.

    # Azure storage access info for open datasets yellow cab
    storage_account = "azureopendatastorage"
    container = "nyctlc"
    
    sas_token = r"" # Blank since container is Anonymous access
    
    # Set Spark config to access  blob storage
    spark.conf.set("fs.azure.sas.%s.%s.blob.core.windows.net" % (container, storage_account),sas_token)
    
    dir = "yellow"
    year = 2016
    months = "1,2,3,4"
    wasbs_path = f"wasbs://{container}@{storage_account}.blob.core.windows.net/{dir}"
    df = spark.read.parquet(wasbs_path)
    
    # Filter data by year and months
    filtered_df = df.filter(f"puYear = {year} AND puMonth IN ({months})")
    
  2. 다음으로, VOrder 엔진을 사용하도록 Spark 구성을 설정하고 델타 쓰기를 최적화합니다.

    • VOrder - 패브릭에는 Microsoft의 VOrder 엔진이 포함되어 있습니다. VOrder 기록기는 Delta Lake parquet 파일을 최적화하여 전체 Delta Lake 및 PARQUET 형식 준수를 유지하면서도 VOrder를 사용하여 최적화되지 않은 Delta Lake 파일에 대해 3x-4x 압축 향상 및 최대 10배 성능 가속을 제공합니다.

    • 쓰기 최적화 - Microsoft Fabric의 Spark에는 기록된 파일의 수를 줄이고 기록된 데이터의 개별 파일 크기를 늘리기 위한 대상을 줄이는 쓰기 최적화 기능이 포함되어 있습니다. 쓰기 작업 중에 파일을 동적으로 최적화하여 기본 128MB 크기의 파일을 생성합니다. 대상 파일 크기는 구성을 사용하여 워크로드 요구 사항에 따라 변경될 수 있습니다.

      이러한 구성은 다음 코드 셀에 설명된 대로 세션 수준(Notebook 셀에서 spark.conf.set)으로 적용하거나 작업 영역에서 만든 모든 Spark 세션에 자동으로 적용되는 작업 영역 수준에서 적용할 수 있습니다. 이 자습서에서는 코드 셀을 사용하여 이러한 구성을 설정합니다.

      spark.conf.set("sprk.sql.parquet.vorder.enabled", "true") # Enable VOrder write
      spark.conf.set("spark.microsoft.delta.optimizeWrite.enabled", "true") # Enable automatic delta optimized write
      

      작업 영역 수준 Apache Spark 구성은 작업 영역 설정, 데이터 엔지니어링/과학, Spark 컴퓨팅, Spark 속성, 추가에서 설정할 수 있습니다.

  3. 다음 단계에서는 spark 데이터 프레임 쓰기 작업을 수행하여 데이터를 nyctaxi_raw 레이크하우스 테이블에 저장합니다.

    table_name = "nyctaxi_raw"
    filtered_df.write.mode("overwrite").format("delta").save(f"Tables/{table_name}")
    print(f"Spark dataframe saved to delta table: {table_name}")
    

    데이터 프레임이 저장되면 작업 영역에서 연결된 레이크하우스 항목으로 이동하고 레이크하우스 UI를 열어 이전 단계에서 만든 nyctaxi_raw 테이블의 데이터를 미리 볼 수 있습니다.

    레이크하우스 뷰의 테이블에서 데이터 목록을 미리 볼 위치를 보여 주는 스크린샷

다음 단계