본문 바로가기
빅데이터/hive

[hive] 하이브에서 insert, delete, update 사용

by hs_seo 2018. 3. 30.

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 이상에서 지원한다. 그 이전 버전에서 처리하려고 하면 오류가 발생한다.


반응형