Iceberg #Spark
-
Spark + Iceberg - 5(Merge on read vs Copy on write)Data Engineering 2024. 1. 21. 09:46
소개 아이스버그 마지막으로 볼 기능인 MOR & COW 이다. 빅데이터를 다루는데 Update를 지원한다는 건 모든 ACID 트랜잭션을 지원한다는 것이다. 물론 OLTP 보다는 성능이 떨어지겠지만 OLAP에서 구현했다는 것에 대한 의미가 있다고 본다. COW는 "읽기가 자주 발생하고 수정/삭제가 자주 발생하지 않고 대규모 테이블 업데이트를 사용하는 경우" 사용된다. 말 그대로 수정해야하는 컬럼이 있는 데이터 파일을 복제해 컬럼 데이터가 업데이트 되어진 파일을 만드는 것이다. 많은 컬럼이 수정될 때는 효율적이지만 소수 컬럼이 수정될 때는 전체 데이터를 복사하기 때문에 비 효율적이다. MOR은 "수정/삭제가 빈번하게 발생하는 테이블을 사용하는 경우" 적합하다. COW와는 달리 MOR은 변경 사항들을 새 ..
-
Spark + Iceberg - 2(Partition, Schema evolution)Data Engineering 2024. 1. 16. 22:27
소개 아이스버그 기능 Partition,Schema Evolution에 대해서 살펴보자. 기존 하이브 테이블은 파티셔닝을 변경할 수 없다. 그래서 일별 단위에서 시간별 단위로 변경하려면 새로운 테이블을 만들어야한다. 쿼리도 재작성해야하므로 불편함이 존재한다. 이것을 해결하기 위해서 아이스버그는 Partitioning Evolution을 제공한다. 그리고 Schema에 대한 Evolution을 관리할 수 있다. 아래 예시는 Schema Evolution이 적용되는 예시이다. 1. 테이블에 새로운 컬럼을 추가하는 경우 2. 테이블에 존재하는 컬럼을 삭제하는 경우 3. 컬럼명을 새로 변경했을 경우 4. 컬럼 타입을 변경했을 경우 5. 테이블 컬럼 순서를 변경했을 경우 위 변경들은 메타 데이터 변경이므로 데이터..
-
Spark + Iceberg - 1(소개 및 연동)Data Engineering 2024. 1. 16. 20:25
소개 일반적으로 데이터 플랫폼에서는 HDFS, S3(데이터 저장) + Hive Metastore(메타데이터 저장) + Spark, Trino, Hive(쿼리 엔진) 조합하여 사용한다. 그러나 문제점이 있다. 여러 사용자가 HMS를 공유하기 때문에 OOM이 발생할 확률이 크다. 그래서 이것을 분리하기 위해서 Iceberg를 사용한다. 예를 들어서 사용자1이 TABLE_A에 접근하려고하고 사용자2가 TABLE_B에 접근하려고 하면 하나의 인스턴스를 공유하고 있는 예전과 달리 Iceberg는 각 Table마다 File로 저장하여 관리하기 때문에 서로 영향이 가지않는다. 또한 Hive에 대한 의존성이 없어진다. S3 + Spark만 있으면 실행이 가능하다는 장점이 있다. 결국 트랜잭션을 가진 Datalakeho..