Netflix Metacat : 큰 데이터를 발견하고 의미있게 만들기

대부분 기업에는 다양한 데이터 형식으로 된 많은 양의 데이터와 수많은 데이터 소스가 있습니다. 그리고 데이터 소스로 부터 데이터를 분석합니다. Netflix의 데이터웨어하우스는 Amazon S3, Druid, Elasticsearch, Redshift, Snowflake 및 MySQL에 저장된 많은 양의 데이터 세트로 구성됩니다. 그리고 Spark, Presto, Pig/Hive를 이용하여 데이터 세트를 처리합니다.

Netflix는 다양한 데이터 소스를 “단일” 데이터웨어 하우스로 상호 운용하기 위해서 Metacat을 구축했습니다. 본 글에서는 데이터를 쉽게 찾고, 처리/관리하기 위한 메타 데이터 서비스인 Metacat을 만들게된 이유에 대해서 기술합니다.

목표

Netflix의 빅데이터 플랫폼의 핵심 아키텍처에는 세가지 주요 서비스가 존재합니다.

  1. 실행 서비스(Genie)
  2. 메타 데이터 서비스
  3. 이벤트 서비스

Netflix가 플랫폼을 구축할때, Pig를 ETL언어로 Hive를 ad-hoc 쿼리 언어로 채택했습니다. Pig는 기본적으로 메타 데이터 시스템을 가지고 있지 않기 때문에 두 시스템간에 상호 운용될 수 있는 시스템을 구축하는것이 이상적이었다고 합니다.

그래서 모든 데이터 저장소를 위한 federated metadata access layer 역할을 하는 Metacat이 탄생했습니다. Metacat은 세가지 주요 목표를 제공합니다.

  • 메타 데이터 시스템 통합뷰
  • 데이터 세트에 대한 메타데이터용 통합 API
  • 데이터 세트에 대한 사용자 메타 데이터 저장소와 임의의 비즈니스

크고 분산된 형태의 데이터세트를 가지고 있는 다른 회사들도 Netflix와 비슷한 어려움을 겪었고 Apache “Atlas”, Twitter “Data Abstraction Layer”, Linkedin “WhereHows”는 유사한 문제를 해결하기 위해 작성되어졌습니다.

Metacat

Metacat은 다양한 데이터 저장소의 메타 데이터에 접근할 수 있는 Federation 서비스 입니다.

데이터 세트에 대한 비즈니스 및 사용자 정의 메타 데이터만 직접 저장하고 전체 검색을 위해 Elasticsearch에 데이터 세트에 대한 모든 정보를 기재합니다.

다음은 Metacat에서 제공하는 기능입니다.

  • 데이터 추상화 및 상호 운용성
  • 비즈니스 및 사용자 정의 메타 데이터 저장소
  • 데이터 검색
  • 데이터 변경에 대한 감사 및 알림
  • Hive 메타 스토어 최적화

데이터 추상화 및 상호 운용성

Pig, Spark, Presto/Hive와 같은 여러 Query 엔진은 Netflix에서 데이터 처리 및 사용하는데에 활용됩니다. 이 부분에 공통 추상화 계층을 도입함으로써 데이터 세트를 서로 다른 엔진에서 상호 교환적으로 접근 할 수 있습니다.

Hive 에서 데이터를 읽는 Pig 스크립트는 Pig 유형의 Hive열 테이블을 읽을 수 있습니다. 하나의 데이터 저장소에서 다른 데이터 저장소로의 데이터 이동을 위해 Metacat은 대상 테이블의 데이터 형식을 사용하여 대상 데이터 저장소에 새 테이블을 생성하는 것을 도와줌으로써 프로세스를 쉽게 만들 수 있습니다.

Metacat thrift 서비스는 Spark/Presto와의 손쉬운 통합을 위해 Hive Thread 인터페이스를 지원합니다. 이를 통해 모든 메타 데이터 변경 사항을 하나의 시스템으로 전달 할 수 있게됩니다.

비즈니스 및 사용자 정의 메타 데이터

Metacat은 스토리지에 데이터 세트에 대한 추가 비즈니스 및 사용자 정의 메타 데이터를 저장합니다. 현재의 비즈니스 메타 데이터를 사용하여 다른 유즈케이스와의 연결정보, 구성정보, 메트릭(Hive/S3 파티션 및 테이블) 및 테이블 TTL을 저장합니다.

사용자 정의 메타 데이터는 사용자가 자신의 용도로 설정 할 수 있는 자유 형식의 메타 데이터 입니다. 비즈니스 메타 데이터는 논리적/물리적 메타 데이터로 분류 됩니다. 테이블과 같은 논리적 구조에 대한 비즈니스 메타 데이터는 논리적 메타 데이터로 분류됩니다.

데이터 분류 및 ETL 처리 표준화를 위해 메타 데이터를 사용하게되고 테이블 소유자는 비즈니스 메타 데이터의 테이블에 대한 감사 정보를 제공 할 수 있습니다.테이블 속성(열 기본값과 유효성 검사 규칙)을 제공할 수 도 있습니다. 테이블이나 파티션에 저장된 실제 데이터에 대한 메타 데이터는 물리적 메타 데이터로 분류됩니다.

ETL처리는 작업 완료시 데이터에 대한 메트릭을 저장하고 나중에 유효성 검사에 사용됩니다. 동일한 측정 항목을 사용하여 데이터의 비용과 공간을 분석할 수 있습니다. 두 테이블이 동일한 위치를 가리킬 수 있는 경우에는 두 테이블이 동일한 실제 메타 데이터를 가질 수 있지만 다른 논리 메타 데이터도 가질 수 있기 때문에 논리적 vs 물리적 메타 데이터를 구별하는 것이 중요합니다.

데이터 검색

데이터 소비자로서 다양한 데이터 세트를 쉽게 찾고 발견 할 수 있어야 합니다. Metacat은 Elasticsearch에 스키마 메타 데이터 및 비즈니스/사용자 정의 메타 데이터를 게시하여 데이터웨어 하우스의 정보를 전체 텍스트로 검색할 수 있도록 해줍니다. 또한 Big Data Portal SQL 편집기에서 자동 제안 및 자동 완성 기능을 사용할 수 있습니다. 데이터 세트를 카탈로그로 구성하면 소비자가 정보를 탐색하는 데 도움이 됩니다. 태그는 조직 및 주제 영역을 기반으로 데이터를 분류하는데 사용되고 데이터 수명주기 관리를 위한 테이블 식별도 가능합니다.

데이터 변경 알림 및 감사

Metacat은 데이터 저장소의 중앙 게이트웨이로써 메타 데이터 변경 및 데이터 업데이트를 캡쳐합니다. 테이블 및 파티션 변경에 대한 푸시 알림 시스템도 제공합니다. 현재 Netflix는 이 매커니즘을 사용하여 분석을 위해 자체 데이터 파이프 라인(Keystone)에 이벤트를 게시하여 데이터 사용 및 추세를 분석 합니다. 또한 Amazon SNS에도 게시하고 있습니다. Netflix의 경우 데이터 기반 아키텍처를 이벤트 중심 아키텍처로 발전시키고 있습니다. SNS에 이벤트를 게시하면 데이터 플랫폼의 다른 시스템이 이러한 메터 데이터 또는 데이터 변경 사항에 적절하게 대응 할 수 있습니다. 예를 들어 테이블을 삭제하면 S3 웨어 하우스 관리자 서비스가 이벤트를 구독하고 S3의 데이터를 적절하게 정리할 수 있습니다.

Hive 메타스토어 최적화

RDS를 기반으로 하는 Hive 메타스토어는 부하가 높으면 성능이 떨어집니다. Netflix는 메타 스토어 API를 사용하여 파티션을 작성하고 읽는데 많은 문제를 발견했습니다. 그리고 해당 API를 더이상 사용하지 않기로 결정합니다. 대신 파티션 읽기 및 쓰기를 위해 백업된 RDS와 직접 연동하는 Hive Connection을 개선했습니다.

Next Steps

Netflix는 Metacat을 구축하는데 많은 노력을 기울였습니다. 그러나 더욱더 데이터웨어 하우스 환경을 향상시키기 위해 계속해서 작업해야 하는 몇 가지 추가 기능이 존재합니다.

  • 테이블 히스토리를 제공하기 위한 스키마 및 메타 데이터 버전 관리 (특정 컬럼에 대한 메타 데이터 변경 사항을 추적하거나 시간 경과에 따라 테이블 크기 경향을 볼 수 있도록…)
  • 테이블 액세스 빈도과 같은 메타 데이터를 Metacat에 집계하고 테이블의 중요도 순위를 지정하는데 활용하기 위한 데이터 계보 서비스
  • Elasticsearch 및 Kafka와 같은 데이터 저장소에 대한 지원 추가
  • Pluggble metadata validation — 비즈니스 및 사용자 정의 메타 데이터는 자유 형식이기에 메타 데이터의 무결성을 유지하려면 유효성 검증이 필요합니다. Metacat은 메타 데이터를 저장하기 전에 실행할 수 있는 유효성 검증 전략을 통합 할 수 있는 Pluggable metadata 아키텍처를 수립해야 합니다.

Sources: