프로그래밍/Spark

[Spark] 데이터 베이스, 데이터 레이크 , 레이크 하우스

장경훈 2022. 12. 3. 14:46
이 포스팅은 ⟪러닝 스파크(2판)⟫(제이펍, 2022년)을 공부하면서 정리한 내용입니다.

*스토리지 솔루션

기본적으로 데이터 파이프라인을 구축할 때에는 스토리지 솔루션의 선택에 따라서 파이프라인의 견고함과 성능을 결정한다.

이런 스토리지 솔루션은 데이터베이스에서 데이터 레이크, 더 나아가서 데이터 레이크하우스로 넘어가게 되었다.

 

*최적의 스토리지 솔루션에 필요한 속성

  • 확장및 성능
  • 트랜젝션 지원
  • 다양한 데이터 형식 지원
  • 다양한 워크로드 지원
  • 개방성

 

*데이터베이스

*데이터 베이스 특징

  • 데이터베이스는 구조화된 테이블을 SQL쿼리를 사용하여 읽을 수 있으며 데이터 저장 및 처리를 모두 최적화 가능
  • 온라인 트랜잭션 처리 워크로드 ->간단한 쿼리로 높은 동시성, 짧은 지연 시간이 특징
  • 온라인 분석 처리 -> OLAP 워크로드는 일반적으로 복잡한 쿼리이다 (spark는 기본적으로 OLAP워크로드용으로 설계된 엔진)

*데이터 베이스의 한계

  • 데이터 크기의 증가- 데이터 크기가 너무 방대해짐
  • 분석의 다양성 증가 - 최근에는 데이터 수집에 이은 머신러닝, 딥러닝으로 인해 복잡한 분석이 필요해짐
  • 데이터베이스를 확장하는 데 비용이 많이 생김
  • 데이터베이스는 SQL이 아닌 것들을 잘 지원하지 않음

 

*데이터 레이크

데이터베이스의 한계를 극복하기 위해서 데이터 레이크라는 다른 데이터 저장 접근방식이 생기게 되었다. 데이터 레이크는 범용 하드웨어에서 실행되고, 쉽게 확장되는 분산 스토리지 솔루션이면서 전체적으로 동일한 성능에 훨씬 저렴하게 구축 가능. 또한 데이터베이스에 비해 많은 유연성을 가질 수 있다.

 

*조직에서 사용하는 구축방법

  • 스토리지 시스템 - 클러스터에서 HDFS를 실행하거나 클라우드 개체 저장소 (AWS Se, 구글 클라우드 스토리지)등을 선택한다
  • 파일 형식 - 데이터는 정형, 비정형 형식으로 파일에 저장된다.
  • 처리 엔진 - 분석 작업 부하의 종류에 따라 처리 엔진 선택 - 배치 처리 엔진(스파크, 프레스토, 하이브), 스트림 처리(스파크, 플링크), 머신러닝 라이브러리(spark MLlib, 사이킷런)

*데이터 레이크의 한계

  • 원자성과 독립성 - 분산 방식으로 기록하기 때문에 작업이 실패하면 잠재적으로 손상된 데이터가 남을 수 있음.
  • 일관성 - 실패한 쓰기에 대한 원자성 부족으로 인해 일관성까지 잃게 된다. 데이터 레이크의 흔한 문제는 실수로 인해 기존 데이터와 일치하지 않는 형식 및 스키마로 데이터 파일을 작성하는 것

*데이터 레이크의 한계를 돌파하기 위한 트릭

  • 데이터 레이크에 있는 대규모 데이터 파일 컬렉션을 열값에 따라 하위 파티션으로 만든다. 기존 데이터의 원자적 수정을 달성하는 방법 으로 일부 레코드를 업데이트 하거나 삭제하기 위해 종종 하위 파티션 디렉터리 전체 데이터를 다시 쓴다.
  • 데이터에 대한 동시 엑세스 또는 이로 인한 데이터 불일치를 회피하기 위해. 데이터 업데이트 작업 및 쿼리 작업에 대해 일정한 시차를 두고 실행

 

*레이크 하우스

OLAP 워크로드 위한 데이터 레이크와 데이터웨어하우스의 최고의 요소만을 결합한 방법. 데이터 레이크에 사용되는 확장 가능한 저비용 스토리지에서 데이터베이스와 유사한 데이터 관리 기능을 제공함.

 

*레이크 하우스 특징

  • 트랜잭션 지원 - 동시 작업 부하가 있는 경우 ACID 보장을 제공  *ACID=(원자성, 일관성, 고립성, 지속성)
  • 스키마 적용 및 거버넌스 - 잘못된 스키마가 있는 테이블에 삽입되는 것을 방지, 필요할때마다 스키마를 발전시켜 변화하는 데이터를 수용 가능.
  • 오픈 형식의 다양한 데이터 유형 지원
  • 다양한 워크로드 지원
  • 업서트 및 삭제 지원 - 트랜잭션 보장으로 데이터를 동시에 삭제하고 업데이트 가능
  • 데이터 거버넌스 - 무결성에 대해 추론하고, 모든 데이터 변경사항을 감사할 수 있는 도구 제공.

'프로그래밍 > Spark' 카테고리의 다른 글

[Spark] MLlib 정리  (0) 2022.12.07
[Spark] 델타 레이크 구축  (0) 2022.12.06
[Spark] 스트리밍 성능 튜닝 시 고려할 점  (0) 2022.12.02
[Spark] 스트리밍 집계, 조인  (0) 2022.11.29
[Spark] Spark 스트리밍 쿼리  (0) 2022.11.28