ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Delta Lake: 클라우드 객체 저장소 위의 고성능 ACID 테이블 저장소 - 1)
    Data 2023. 4. 22. 13:18
    Amazon S3와 같은 클라우드 개체 저장소는 지구상에서 가장 크고 가장 비용 효율적인 스토리지 시스템 중 하나이므로 대규모 데이터 웨어하우스 및 데이터 레이크를 저장하는 매력적인 대상이 됩니다.
    안타깝게도 키-값 저장소로 구현하면 ACID 트랜잭션 및 고성능을 달성하기 어렵습니다. 개체 나열과 같은 메타데이터 작업은 비용이 많이 들고 일관성 보장이 제한됩니다. 이 백서에서는 Databricks에서 초기에 개발된 클라우드 개체 저장소에 대한 오픈 소스 ACID 테이블 저장소 계층인 Delta Lake를 제시합니다. Delta Lake는 Apache Parquet 형식으로 압축된 트랜잭션 로그를 사용하여 ACID 속성, 시간 이동 및 대용량 테이블 데이터 세트에 대한 훨씬 더 빠른 메타데이터 작업을 제공합니다(예: 쿼리와 관련된 수십억 개의 테이블 파티션을 빠르게 검색하는 기능). 또한 이 디자인을 활용하여 자동 데이터 레이아웃 최적화, upserts, 캐싱 및 감사 로그와 같은 높은 수준의 기능을 제공합니다. Delta Lake 테이블은 Apache Spark, Hive, Presto, Redshift 및 기타 시스템에서 액세스할 수 있습니다. Delta Lake는 매일 엑사바이트의 데이터를 처리하는 수천 명의 Databricks 고객에게 배포되며, 가장 큰 인스턴스는 엑사바이트 규모의 데이터 세트와 수십억 개의 개체를 관리합니다.
     

    1. 소개

    Amazon S3 및 Azure Blob Storage와 같은 클라우드 개체 저장소는 수백만 명의 고객을 위해 엑사바이트 규모의 데이터를 보유하는 지구상에서 가장 크고 가장 널리 사용되는 스토리지 시스템 중 하나가 되었습니다. 종량제 청구, 규모의 경제, 전문가 관리와 같은 클라우드 서비스의 기존 이점 외에도 클라우드 개체 저장소는 사용자가 컴퓨팅 리소스와 스토리지 리소스를 별도로 확장할 수 있기 때문에 특히 매력적입니다. 사용자는 페타바이트의 데이터를 저장할 수 있지만 클러스터를 실행하여 몇 시간 동안만 쿼리를 실행할 수 있습니다. 그 결과 현재 많은 조직에서 클라우드 개체 저장소를 사용하여 데이터 웨어하우스 및 데이터 레이크에서 구조화된 대규모 데이터 세트를 관리하고 있습니다.
    Apache Spark, Hive 및 Presto를 비롯한 주요 오픈 소스 "빅 데이터" 시스템은 Apache Parquet 및 ORC와 같은 파일 형식을 사용하여 클라우드 개체 저장소에 대한 읽기 및 쓰기를 지원합니다. AWS Athena, Google BigQuery 및 Redshift Spectrum을 포함한 상용 서비스도 이러한 시스템 및 이러한 개방형 파일 형식에 대해 직접 쿼리할 수 있습니다. 안타깝게도 많은 시스템이 클라우드 개체 저장소에 대한 읽기 및 쓰기를 지원하지만 이러한 시스템에서 성능이 우수하고 변경 가능한 테이블 스토리지를 구현하는 것은 어렵기 때문에 데이터 웨어하우징 기능을 구현하기가 어렵습니다. HDFS와 같은 분산 파일 시스템 또는 DBMS의 사용자 지정 스토리지 엔진과 달리 대부분의 클라우드 개체 저장소는 키-값 저장소일 뿐이며 교차 키 일관성이 보장되지 않습니다. 성능 특성도 분산 파일 시스템과 크게 다르며 특별한 주의가 필요합니다. 클라우드 개체 저장소에 관계형 데이터 세트를 저장하는 가장 일반적인 방법은 Parquet 및 ORC와 같은 열 형식 파일 형식을 사용하는 것입니다. 여기서 각 테이블은 개체 집합(Parquet 또는 ORC "파일")으로 저장되며 일부에 의해 "파티션"으로 클러스터링될 수 있습니다. 이 접근 방식은 개체 파일이 적당히 큰 경우 스캔 워크로드에 적합한 성능을 제공할 수 있습니다. 그러나 보다 복잡한 워크로드에 대해서는 정확성과 성능 문제가 모두 발생합니다.
     
    첫째, 다중 개체 업데이트는 원자적이지 않기 때문에 쿼리 간에 격리가 없습니다. 예를 들어 쿼리가 테이블의 여러 개체를 업데이트해야 하는 경우(예: 모든 테이블의 Parquet 파일에서 한 사용자에 대한 레코드 제거) 독자 쿼리가 각 개체를 개별적으로 업데이트할 때 부분 업데이트가 표시됩니다. 쓰기 롤백도 어렵습니다. 업데이트 쿼리가 충돌하면 테이블이 손상된 상태가 됩니다.
     
    둘째, 수백만 개의 개체가 있는 대형 테이블의 경우 메타데이터 작업에 비용이 많이 듭니다. 예를 들어 Parquet 파일에는 선택적 쿼리에서 읽기를 건너뛰는 데 사용할 수 있는 최소/최대 통계가 있는 바닥글이 포함되어 있습니다.
     
    HDFS에서 이러한 바닥글을 읽는 데 몇 밀리초가 걸릴 수 있지만 클라우드 개체 저장소의 대기 시간이 훨씬 더 길어 이러한 데이터 건너뛰기 검사가 실제 쿼리보다 오래 걸릴 수 있습니다. 클라우드 고객과 함께 일한 경험에 비추어 볼 때 이러한 일관성 및 성능 문제는 엔터프라이즈 데이터 팀에 중대한 과제를 안겨줍니다. 대부분의 엔터프라이즈 데이터 세트는 지속적으로 업데이트되므로 원자 쓰기를 위한 솔루션이 필요합니다. 사용자에 대한 대부분의 데이터 세트는 GDPR 규정 준수와 같은 개인 정보 보호 정책을 구현하기 위해 테이블 전체 업데이트가 필요합니다. 순전히 내부 데이터 세트도 잘못된 데이터를 복구하고 최신 레코드를 통합하는 등의 업데이트가 필요할 수 있습니다.
    Databricks의 클라우드 서비스(2014–2016)의 처음 몇 년 동안 받은 서포트 요청의 약 절반은 클라우드 스토리지 전략으로 인한 데이터 손상, 일관성 또는 성능 문제(예: 충돌한 업데이트 잡의 영향제거 혹은 수만개의 객체들을 읽는 쿼리의 성능을 향상하는) 때문이었습니다.
     
    이러한 문제를 해결하기 위해 우리는 클라우드 개체 저장소 위에 ACID 테이블 저장 레이어 형태로 Delta Lake를 설계하여, 2017년에 고객에게 제공하기 시작했고 2019년에 오픈 소스화했습니다. Delta Lake의 핵심 아이디어는 간단합니다. 클라우드 개체 저장소에 자체적으로 저장되는 미리 쓰기(write-ahead) 로그를 사용하여 어떤 개체가 델타 테이블의 일부인지에 대한 정보를 ACID 방식으로 유지 관리합니다.
    개체 자체는 Parquet로 인코딩되므로 이미 Parquet를 처리할 수 있는 엔진에서 커넥터를 쉽게 작성할 수 있습니다. 이 설계를 통해 클라이언트는 직렬화 가능한 방식으로 여러 개체를 한 번에 업데이트하고 개체의 하위 집합을 다른 개체로 교체하는 등 개체 자체에서 높은 병렬 읽기 및 쓰기 성능을 달성할 수 있습니다(원시 Parquet와 유사).
    또한 로그에는 각 데이터 파일에 대한 최소/최대 통계와 같은 메타데이터가 포함되어 있어 "개체 저장소의 파일" 접근 방식보다 훨씬 빠른 메타데이터 검색이 가능합니다.
    결정적으로 우리는 모든 메타데이터가 기본 개체 저장소에 있고 트랜잭션이 개체 저장소에 대한 낙관적 동시성 프로토콜을 사용하여 달성되도록 Delta Lake를 설계했습니다(일부 세부 정보는 클라우드 공급자에 따라 다름).
    즉, Delta 테이블의 상태를 유지하기 위해 서버를 실행할 필요가 없습니다. 사용자는 쿼리를 실행할 때 서버를 시작하기만 하면 되며 컴퓨팅 및 스토리지를 별도로 확장하는 이점을 누릴 수 있습니다. 이 트랜잭션 설계를 기반으로 기존 클라우드 데이터 레이크에서는 사용할 수 없는 다음과 같은 일반적인 고객 문제를 해결하기 위해 Delta Lake에 여러 다른 기능을 추가할 수 있었습니다.
     
     
     Time Travel : 사용자가 특정 시점 스냅샷을 쿼리하거나 잘못된 데이터 업데이트를 롤백할 수 있는 시간 이동.
     UPSERT, DELETE 및 MERGE 작업 - 관련 객체를 효율적으로 재작성하여 보관된 데이터 및 컴플라이언스 워크플로(예: GDPR)에 대한 업데이트를 구현합니다.
     Effiective streaming I/O : 스트리밍 작업이 짧은 지연 시간에 작은 객체를 테이블에 쓰도록 한 다음 트랜잭션 방식으로 나중에 성능을 위해 더 큰 객체로 병합합니다. 작업이 델타 테이블을 메시지 버스로 처리할 수 있도록 테이블에 추가된 새 데이터에 대한 빠른 "테일링" 읽기도 지원됩니다.
     Cashing : Delta 테이블의 개체와 해당 로그는 변경할 수 없기 때문에 클러스터 노드는 로컬 저장소에 안전하게 캐시할 수 있습니다. Databricks 클라우드 서비스에서 이를 활용하여 Delta 테이블에 대한 투명한 SSD 캐시를 구현합니다.
     Data layout optimization : 당사의 클라우드 서비스에는 실행 중인 쿼리에 영향을 주지 않고 테이블의 개체 크기와 데이터 레코드의 클러스터링을 자동으로 최적화하는 기능이 포함되어 있습니다(예: Zorder에 레코드를 저장하여 여러 차원에서 지역성을 확보).
     Schema evolution : 테이블의 스키마가 변경되는 경우 Delta가 다시 작성하지 않고 이전 Parquet 파일을 계속 읽을 수 있도록 합니다.
     Audit logging : 트랜잭션 로그에 기반한 감사 로깅.
     
     
    이러한 기능은 클라우드 개체 저장소에서 데이터 작업의 관리 용이성과 성능을 모두 개선하고 데이터 웨어하우스와 데이터 레이크의 주요 기능을 결합하는 "레이크하우스” 패러다임 (저비용 개체 저장소에 대해 직접 사용할 수 있는 표준 DBMS 관리 기능)을 가능하게 합니다.
    실제로 우리는 이전에 분리된 데이터 레이크, 데이터 웨어하우스 및 스트리밍 스토리지 시스템을 이러한 모든 사용 사례에 적합한 기능을 제공하는 델타 테이블로 교체함으로써 많은 Databricks 고객이 Delta Lake로 전체 데이터 아키텍처를 간소화할 수 있다는 사실을 발견했습니다.
     
    그림 1은 서로 다른 비즈니스 인텔리전스 팀(각각 자체 컴퓨팅 리소스를 실행)을 위한 오브젝트 스토리지, 메시지 큐 및 두 개의 데이터 웨어하우스를 포함하는 데이터 파이프라인이 Delta의 Streaming I/O와 ETL과 BI를 실행하기 위한 performance feature들을 사용하여  객체저장소 위의 Delta 테이블로 대체되는 극단적인 예를 보여줍니다. 
     

    그림 1: 3개의 스토리지 시스템(메시지 대기열, 개체 저장소 및 데이터 웨어하우스) 혹은 스트림과 테이블 저장소를 위하여 Delta Lake를 이용하여 구현된 데이터 파이프라인. Delta Lake 버전은 데이터의 여러 복사본을 관리할 필요가 없으며 저렴한 개체 스토리지만 사용합니다.

     

    새로운 파이프라인은 저비용 객체 스토리지만 사용하고 데이터 사본을 적게 생성하여 스토리지 비용과 유지 관리 오버헤드를 모두 줄입니다. Delta Lake는 현재 대부분의 Databricks 대규모 고객이 사용하고 있으며 매일 엑사바이트의 데이터를 처리합니다(전체 작업량의 약 절반).
    Google Cloud, Alibaba, Tencent, Fivetran, Informatica, Qlik, Talend 및 기타 제품에서도 지원됩니다. Databricks 고객 사이에서 Delta Lake의 사용 사례는 기존 ETL 및 데이터 웨어하우징 워크로드에서 생물 정보학, 실시간 네트워크 보안 분석(매일 수백 TB의 스트리밍 이벤트 데이터), GDPR 규정 준수 및 머신 러닝을 위한 데이터 관리에 이르기까지 매우 다양합니다. (수백만 개의 이미지를 S3 객체가 아닌 Delta 테이블의 레코드로 관리하여 ACID를 얻고 성능을 향상).
    이러한 사용 사례는 섹션 5에서 자세히 설명합니다. 일화적으로 Delta Lake는 Databricks의 클라우드 스토리지에 대한 지원 문제의 비율을 절반에서 거의 없음으로 줄였습니다..
    또한 데이터 레이아웃 최적화 및 통계에 대한 빠른 액세스를 사용하여 매우 높은 차원의 데이터 세트 (예: 네트워크 보안 및 생물 정보학 사용 사례)를 쿼리하는 극단적인 경우에 최대 100배의 속도 향상을 통해 대부분의 고객을 위한 워크로드 성능을 향상시켰습니다.
    오픈 소스 Delta Lake 프로젝트에는 Apache Spark(배치 또는 스트리밍), Hive, Presto, AWS Athena, Redshift 및 Snowflake에 대한 커넥터가 포함되며 여러 클라우드 개체 저장소 또는 HDFS에서 실행할 수 있습니다. 이 백서의 나머지 부분에서는 Delta Lake의 동기 및 설계와 함께 설계 동기가 된 고객 사용 사례 및 성능 실험을 제시합니다.

     

    출처 : https://www.databricks.com/wp-content/uploads/2020/08/p975-armbrust.pdf

Designed by Tistory.