티스토리 뷰
Hive ACID
0.13버전부터 ACID를 지원하곡, 0.14버전부터 Update, Delete를 포함한 DML을 지원
- ORC 일때만 지원
CREATE TABLE table1 ( ) SOTRED AS ORC TBLPROPERTIES ("transactional"="true")
제약사항
- auto-commit 으로 처리
- ORC 포맷만 지원
- 버켓팅 되어야 함
- Managed 테이블만 가능
- External 테이블은 Compactor 가 제어할 수 없기 때문
- Non-ACID 세션에서는 ACID 테이블에 접근 불가
기본 설계
- 테이블이나 파티션은 base 파일의 집합으로 저장
- 새로운 레코드, update, delete 에 대해서는 delta 파일로 저장
- 읽는 시점에 delta 파일과 합쳐서 새로운 파일 생성
Compactor
- ACID를 지원하기 위해서 메타스토어에서 수행되고 있는 백그라운드 프로세스
- Hive는 base 파일과 delta 파일을 이용한 컴팩션으로 ACID를 지원하기 때문에 테이블을 생성할 때 ORC형식과 버켓팅 생성을 반드시 추가해야 함
CREATE TABLE table1 ( ) CLUSTERED BY col1 INTO 10 BUCKETS SOTRED AS ORC TBLPROPERTIES ("transactional"="true")
- 버켓팅 된 기본 base 파일이 생성되고, 트랜잭션에 대한 delta 파일이 생성
- 델타 파일이 많이 생기면, 마이너 컴팩션이 발생하여 델타 파일을 하나로 합침
- 델타 파일이 커지면, 메이저 컴팩션이 발생하여 베이스 파일을 수정
Update, Delete 시점마다 MR 잡이 실행되지 않고, 주기적으로 수행되는 컴팩션 작업에의해 MR 잡이 처리
마이너 컴팩션(minor compaction)
- 델타 파일을 모아서 버켓당 하나의 델타 파일로 다시 생성
- 메이저 컴팩션(major compaction)
- 베이스 파일과 델타 파일을 새로운 베이스 파일로 생성
설정
- 테이블
- hive.support.concurrency=true;
- hive.enforce.bucketing=true;
- hive.exec.dynamic.partition.mode=nonstrict;
- hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
- 메타스토어
- hive.compactor.initiator.on=true;
- hive.compactor.worker.threads=3;
테이블 생성
테이블 생성시 다음과 같이 설정값을 입력하여 데이터를 처리한다.
CREATE TABLE table_name (
id int,
name string
)
CLUSTERED BY (id) INTO 2 BUCKETS STORED AS ORC
TBLPROPERTIES ("transactional"="true",
"compactor.mapreduce.map.memory.mb"="2048", -- specify compaction map job properties
"compactorthreshold.hive.compactor.delta.num.threshold"="4", -- trigger minor compaction if there are more than 4 delta directories
"compactorthreshold.hive.compactor.delta.pct.threshold"="0.5" -- trigger major compaction if the ratio of size of delta files to
-- size of base files is greater than 50%
);
컴팩터 설정 변경 방법은 다음과 같다.
ALTER TABLE table_name COMPACT 'minor'
WITH OVERWRITE TBLPROPERTIES ("compactor.mapreduce.map.memory.mb"="3072"); -- specify compaction map job properties
ALTER TABLE table_name COMPACT 'major'
WITH OVERWRITE TBLPROPERTIES ("tblprops.orc.compress.size"="8192"); -- change any other Hive table properties
아마존 EMR에서의 ACID
아마존 S3에서의 ACID는 EMR 버전 5.0 이상에서 지원한다. 그 이전 버전에서 처리하려고 하면 오류가 발생한다.
반응형
'빅데이터 > hive' 카테고리의 다른 글
[hive] hive 쿼리 where 조건의 in 사용시 메타 스토어 오류 (0) | 2018.04.09 |
---|---|
[hive] Hive의 데이터를 CSV 형태의 파일로 export 하는 방법 (0) | 2018.03.30 |
[hive] CBO처리중 힌트 사용시 오류 (0) | 2018.03.29 |
[hive] An error occurred when trying to close the Operator running your custom script. 오류 해결방법 (0) | 2018.03.20 |
[hive] 메타스토어의 테이블로 파티션 위치 확인하는 방법 (0) | 2018.03.19 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 알고리즘
- AWS
- HIVE
- java
- Hadoop
- nodejs
- 백준
- S3
- ubuntu
- HDFS
- 정올
- airflow
- 다이나믹
- Python
- mysql
- bash
- Linux
- oozie
- hbase
- emr
- 하이브
- 하둡
- SPARK
- error
- SQL
- 오류
- build
- 파이썬
- Tez
- yarn
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함