Datalake 환경에서 AWS Redshift 활용방안

2022-05-14

.

Data_Engineering_TIL(20220514)

[학습자료]

“Data Lake 환경에서 Amazon Redshift Spectrum을 이용한 대량 데이터 활용 –김지선, 정현아, AWS:: AWS Summit Online Korea 2020” 세미나 영상을 보고 공부한 내용입니다.

영상자료 URL : https://youtu.be/4tTMrKwpeuQ

** Redshift 딥다이브 세미나 영상 (추가 참고자료) : https://youtu.be/6zB16Mr7lDs

[아젠다]

1) AWS DW 서비스

2) 성능향상을 위한 요소

[AWS DW 서비스]

  • 온프라미스 웨어하우스의 한계 : 폭발적인 데이터 증가에 빠르게 대응하지 못함 (스케일 아웃/업 불가)

1) 다양한 소스 데이터 수집의 한계

정형 데이터 위주의 수집 데이터

Parquet, ORC 등의 오픈 포맷 데이터 수집 필요성이 있으나 불가함

2) 물리서버 증설에 제약

대량 데이터 처리시 리소스 부족 발생

추가 리소스 확보를 위한 빠른 증설이 불가함

3) 데이터 저장소 크기 제한

빠르게 증가하는 데이터 규모를 저장하기에는 제약 사항이 있음

모든 원본 데이터를 보관하지 못하고 선별된 데이터 또는 정제된 데이터만 저장가능함

부득이하게 전체 데이터를 보관 못할 수도 있기 때문에 적재적소에 필요한 데이터를 추출해서 활용할 수 없어서 향후 비지니스 전략 수립에 어려움이 있을 수 있다.

  • 그렇다면 AWS 환경에서는? : 온프라미스 웨어하우스의 한계를 극복할 수 있음

1) AWS에서는 Object 스토리지인 S3를 기반으로 하는 단일저장소로 구성된 데이터 레이크 컨셉을 기반으로 한 데이터 웨어하우스 아키텍처를 구성할 수 있음

2) 필요한 시점에 시스템을 확장하고 리소스를 많이 사용하지 않아도 되는 시점에는 확장했던 리소스를 다시 반환할 수 있음

3) 데이터 레이크를 기반으로 다양한 AWS 서비스를 연계하여 데이터 웨어하우스 아키텍처를 다양하게 확장하여 구성할 수 있음

  • Redshift : AWS에서 제공하는 데이터 웨어하우스 서비스

1) 다양한 포맷의 소스 데이터 지원

오픈 포맷 데이터 소스 지원

정형, 비정형 데이터 수집 및 활용 가능

2) 탄력적인 클러스터 사이즈 확장 및 축소 가능

필요한 시점에 원하는 만큼, 빠르게 서버 사이즈 조정 가능

수분 내에 완료되는 탄력적인 클러스터 크기 조정 기능

일시정지/재시작 기능을 활용한 비용 최적화 운영

3) S3 저장소 기반의 데이터 레이크 연계 가능

S3에 저장된 모든 데이터를 연동해서 사용할 수 있음

데이터 접근 패턴에 따라 여러 계층의 저장소를 사용할 수 있기 때문에 비용 최적화도 가능함

[성능향상을 위한 요소]

  • Redshift가 비싸다는 오해

1) 클러스터 내 디스크 사이즈 부족으로 인하여 일정 시간이 지나면 추가 데이터 저장을 위해서 노드를 증설해야해서 비용 부담이 큰거 아니냐

2) Redshift와 함께 구성할 적합한 ETL 솔루션이 없어서 비싼 써드파티 솔루션을 별도로 사용해야 하는거 아니냐

3) 한번 사이즈를 확정하면 이후에 유연하게 스케일 인/아웃이 불가하기 때문에 불필요하게 최초에 오버스펙을 산정해서 비용이 불필요하게 많이 나오는거 아니냐

  • 오해에 대한 답변

1) 제한적인 저장소는 Redshift 클러스터의 internal disk에 한정된다.

Redshift는 S3기반의 데이터 레이크까지 저장소를 무제한으로 확장할 수 있다.

스펙트럼이라는 추가 기능을 이용하여 S3에 저장된 file object 데이터를 Redshift와 동일한 수준의 SQL을 이용하여 엑세스가 가능하다.

1

S3는 무제한으로 확장이 가능하고 데이터 엑세스 패턴에 따라서 다양한 레벨의 스토리지를 제공하기 때문에 hot, normal, cold 정도로 데이터 액세스 정도를 구분하여 저장하게 되면 추가로 비용을 절감할 수 있다.

2) AWS에서는 ETL 서비스로 Glue 서비스를 제공한다.

소스 데이터를 레드시프트 타켓으로 적재할때 병렬로 빠르게 매니지드 스팍 클러스터를 활용하여 spark job, python job으로 데이터를 처리할 수 있다.

그리고 에어플로우나 스탭뻥션 등을 활용해서 API 작업 호출이나 실행 워크플로우를 조정하고 워크플로우 내 작업간 단계 별 트리거나 상세 제어가 가능하다.

또한 Redshift SQL 기반으로 ETL 파이프라인의 한 구성요소로도 활용이 가능하다.

3) Redshift는 분단위의 빠른 스케일 인/아웃 기능을 제공한다.

Elastic Resizing 기능이라는게 있는데 리사이징 기능을 스케쥴링으로 구성하여 일별 월별 ETL 작업 등 피크타임에 노드를 증설하고 평상시에는 노드를 다시 줄이는 방식으로 자유롭고 빠르게 스케일링 처리가 가능하다.

  • Redshift의 성능에 대한 오해

1) 키가 없다면서요?

지원하는 인덱스가 다양하지 않음

파티션 테이블을 지원하지 않음

2) 스펙트럼은 항상 느리다면서요?

S3 오브젝트 파일을 항상 전체로 읽는것 같다.

결국 모든 데이터 처리는 레드시프트 클러스터의 몫이 아니냐.

S3는 단순히 데이터 저장/읽기만 처리한다.

스펙트럼 플릿은 레드시프트 클러스터로 데이터를 병렬로 전달해주는 역할이다.

스펙트럼에서는 절대 join 쿼리를 쓰면 안된다.

  • 오해에 대한 답변

스펙트럼 플릿에서 Aggregation과 필터처리 모두 가능하다.

캐시기능도 당연히 있다. 반복적인 쿼리의 경우 인크리멘탈 데이터만 반영하고 결과가 캐싱이 된다.

  • Redshift의 쿼리 성능 개선 - Partition Pruning

2

스펙트럼에서는 위와 같이 S3 prefix 기반의 파티셔닝 처리를 하여 file을 저장하게 되면 파티셔닝 효과를 볼 수 있다.

그리고 디멘전 테이블 분산과 join 형태에 따라서 추가적인 Partition Pruning 효과를 볼수 있다.

따라서 파티셔닝은 반드시 적용해야할 필수요소라고 할 수 있다.

  • 데이터 모델링 베스트 프렉티스

1) 대용량 테이블은 S3에 반드시 prefix 파티션 형태로 저장한다.

2) file별로 file 사이즈를 유지해줘야 한다.

최적의 성능을 위해서 64 ~ 256MB의 개별 크기의 파일 사이즈를 유지하는것이 좋다.

3) 코드성 디멘전 테이블은 레드시프트 클러스터에 전체분산으로, 대략 fact 테이블은 s3에 파티셔닝 방식으로 저장하고 두 테이블을 조인하는 것도 좋다.

  • Redshift 쿼리 성능 향상 방안

1) 스펙트럼 쿼리 푸쉬 다운

스펙트럼 플릿은 레드시프트 클러스터의 10배 이상의 많은 노드로 구성되어 있다. 이 파워풀한 컴퓨팅 파워를 사용하기 위해서 Push Down을 해줘야 한다.

다시말해서 스펙트럼 레벨에서 최대한 데이터를 집계하고 처리하는 데이터 사이즈를 줄여줘야 한다.

GROUP BY, SUM 등 스펙트럼 레이어에서 처리하는 연산자를 사용해주면 좋다.

2) 스테이징 테이블 활용

대량 데이터 간에 복잡한 중첩 조인절로 비효율적인 쿼리 플랜 생성을 지양한다.

(쪼인 몇개로 한방에 처리하는 한방쿼리를 지양한다)

대신에 중간 스테이징 테이블을 최대한 활용하여 처리할 데이터 셋 크기를 효과적으로 줄인다.

3) DW에서 파티셔닝 구현도 가능하다.

파티셔닝 체인지의 경우 타겟 테이블과 동일한 스키마에 테이블을 만들고 ALTER TABLE APPEND 구문으로 특정 범위의 데이터만 스위칭이 가능하다.

이렇게 처리할 경우 데이터를 읽고 써서 반영하지 않고 해당 범위의 블록만 이동하는 방식이기 때문에 I/O를 효과적으로 줄일수 있다.

  • Redshift의 운영측면에서 오해

1) DBA가 아니면 운영이 어렵다던데

VACUUM이나 Analyze 등 운영자가 모두 해야하는거 아니냐 그러면 디비에이 없으며 운영 안되는거 아니냐

2) 클러스터 레벨에서 튜닝방법이 별로 없더라구요

  • 오해에 대한 답변

1) 레드시프트는 클라우드 와치와 결합된 다양한 지표의 모니터링 및 어드바이저 기능을 제공한다. 또한 사용자 쿼리 레벨의 상세한 메트릭 및 알람 기능도 제공한다.

2) 쿼리 대기열만 만들고 오토 모드로 지정을 하면 자동으로 클러스터 현황에 따라 대기열 별로 리소스가 배분이 된다.

3) 그 외에 VACUUM이나 Analyze, 압축 등 모두 오토모드를 제공하고 있기 때문에 별도로 운영작업을 할 필요가 없다.

4) 빠른 스케일링과 일시정지 기능은 운영의 편리성 뿐만 아니라 비용 최적화에도 도움이 된다.