Hive Partition(파티션)
· Version : Hadoop 3.0.0-cdh6.3.2, Hive
하이브는 파일 기반 테이블을 사용하기 때문에 데이터 조회시 모든 ROW 정보를 읽고 처리하는 방식으로 데이터가 많으면 속도가 느려진다. 그래서 데이터를 저장할때, 특정 키 기준으로 파티션을 구성하면 조건에 해당하는 파일만 읽기 때문에 데이터 처리 속도가 빨라진다. 파티션은 데이터를 디렉토리로 분리하여 저장한다. 파티션 컬럼은 WHERE 조건에 컬럼처럼 사용할 수 있다. 아래 스크립트는 파티션 테이블을 생성하는 예제이다.
CREATE TABLE tbl( Col_1 STRING ) PARTITIONED BY (date STRING); |
파티션은 동적 (Dynamic) 파티션과 고정(Static) 파티션이 있다. 데이터를 입력할때 단독으로 고정 파티션 또는 동적 파티션으로 사용가능하며 혼합으로도 사용 가능하다. 테이블에 파티션이 적용되면 해당 테이블은 아래와 같은 디렉터리 구조로 데이터 파일을 생성한다.
hdfs://[table path]/date=20191201/ |
[고정 파티션]
고정 파티션은 데이터를 입력할때, INSERT문에 파티션 값을 고정된 값으로 함께 입력한다. 아래 스크립트는 date 파티션에 20191201이라는 파티션을 생성하고 데이터를 입력한다.
INSERT INTO TABLE tbl(date='20191201') SELECT col_1 FROM temp; |
[동적 파티션]
동적 파티션은 파티션 정보를 조회하는 컬럼을 추가하여 전달한다. 아래 스크립트는 date 컬럼을 전달하여 파티션을 동적으로 생성한다.
INSERT INTO TABLE tbl(col_1) SELECT col_1, date FROM temp; |
하이브는 동적 파티션만 사용하는 것을 권장하지 않으며 동적 파티션만 사용하기 위해서는 hive.exec.dynamic.partition.mode 옵션을 nostrict로 변경해야한다.
set hive.exec.dynamic.partition.mode=nonstrict; |
동적 파티션의 수는 변수로 제한되어 있기 때문에 해당 변수를 확인하여 파티션 개수가 설정된 값보다 더 많이 필요할 경우 설정 값을 수정할 수 있도록 한다.
-- 동적 파티션 개수 set hive.exec.max.dynamic.partitions=1000; -- 노드별 동적 파티션 생성 개수 set hive.exec.max.dynamic.partitions.pernode=100; |
[파티션 수정/삭제]
파티션 삭제시 매니지드 테이블의 경우 파티션 위치의 데이터도 함께 삭제되므로 주의한다.
-- 파티션 추가 ALTER TABLE tbl ADD PARTITION (date='20191201');
-- 파티션 LOCATION 수정 ALTER TABLE tbl PARTITION (date='20191201') SET LOCATION 'hdfs://127.0.0.1/path/';
-- 파티션 삭제 ALTER TABLE tbl DROP PARTITION (date='20191201'); ALTER TABLE tbl DROP PARTITION (date < '20191201'); |
[파티션 복구]
파티션 복구시에는 MSCK 명령을 사용한다. 파티션을 한번에 복구하게 되면 작업 시간이 오래 걸리므로 한번에 처리할 파티션의 배치 개수를 조절하여, 작업을 여러번 나누어서 복구하는것이 좋다. 또한 파티션에 허용되지 않거나 규칙에 맞지 않을경우 오류가 발생하는데 ignore 옵션을 사용하여 오류를 무시하고 진행할 수도 있다.
-- 0으로 설정하면 모든 파티션을 복구 set hive.msck.repair.batch.size=0;
-- ignore 옵션으로 오류 무시 set hive.msck.path.validation=ignore;
-- 파티션 복구 MSCK REPAIR TABLE tbl; |
2019-12-20 / Sungwook Kang / http://sungwookkang.com
Hadoop, hive, 하이브, hive partition, 하이브 파티션, 하이브 복구, 하이브 파티션 복구
'SW Engineering > Hadoop' 카테고리의 다른 글
Hive Buckets (버켓) (0) | 2019.12.27 |
---|---|
Hive Skewed (스큐) (0) | 2019.12.24 |
Hive Meta Database (0) | 2019.12.19 |
Hive Meta Store 설정 (0) | 2019.12.18 |
MapReduce 메모리 부족으로 인한 쿼리 실패 (0) | 2019.12.14 |