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

2018. 3. 30. 16:08·빅데이터/hive

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 트랜잭션 관련 wiki 문서 

아마존 EMR 관련 아마존 doc

반응형
저작자표시 비영리 (새창열림)

'빅데이터 > hive' 카테고리의 다른 글

[hive] hive 쿼리 where 조건의 in 사용시 메타 스토어 오류  (0) 2018.04.09
[hive] Hive의 데이터를 CSV 형태의 파일로 export 하는 방법  (1) 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
'빅데이터/hive' 카테고리의 다른 글
  • [hive] hive 쿼리 where 조건의 in 사용시 메타 스토어 오류
  • [hive] Hive의 데이터를 CSV 형태의 파일로 export 하는 방법
  • [hive] CBO처리중 힌트 사용시 오류
  • [hive] An error occurred when trying to close the Operator running your custom script. 오류 해결방법
hs_seo
hs_seo
Hello World!
    반응형
  • hs_seo
    개발자로 살아남기
    hs_seo
  • 전체
    오늘
    어제
    • 전체 (1140)
      • 개발자 (21)
        • 개발에 유의할 점 (0)
        • 면접 (5)
      • IT 소식 (5)
        • 업계 (1)
      • java (51)
        • 디자인패턴 (3)
        • apache-common (1)
      • 개념 (47)
        • 자료구조 (4)
        • 함수형사고 (8)
        • 디자인패턴 (1)
      • 데이터분석 (1)
      • python (67)
        • 코드조각 (12)
        • 라이브러리 (2)
      • 빅데이터 (418)
        • zookeeper (5)
        • hadoop (78)
        • hdfs (12)
        • hive (127)
        • hbase (16)
        • spark (40)
        • scala (4)
        • trino (3)
        • oozie (41)
        • Hue (9)
        • R (5)
        • sqoop (6)
        • flume (3)
        • elasticsearch (2)
        • airflow (16)
        • kafka (3)
        • kubernetes (10)
        • openstack (3)
        • flink (2)
        • redis (2)
      • 빅데이터 강좌 (2)
      • 알고리즘 (131)
        • 알고리즘 (1)
        • 백준 (61)
        • 정올 (41)
        • 더블릿 (5)
        • 프로그래머스 (1)
      • 프로그래밍 언어 (30)
        • go (4)
        • js (9)
        • .Net (6)
        • Jsp (1)
        • ansible (3)
        • terraform (6)
      • Tools (56)
        • docker (2)
        • macbook (6)
        • maven (3)
        • sublime (1)
      • 프레임워크 (25)
        • [JS] angularjs (2)
        • [JS] node.js (19)
        • [Java] spring (2)
        • Android (2)
      • 데이타베이스 (43)
        • SQLD (5)
        • Oracle (1)
        • MySQL (8)
        • ADsP (2)
      • 리눅스 (25)
        • Bash (61)
      • GCP (5)
      • AWS (34)
        • EC2 (2)
        • EMR (14)
      • 정보보안기사 (4)
        • 네트워크 (1)
      • 개인 (80)
        • 업무실수 (0)
        • 책 (9)
        • 교육 (3)
        • 여행 (17)
        • 영화 (12)
        • 음악 (2)
        • 피규어 (4)
        • 게임 (3)
        • 생각 (7)
        • 기타 (10)
        • 좋은글 (5)
        • 좋은 사이트 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 빅데이터-하둡,하이브로 시작하기
    • 빅데이터-스칼라, 스파크로 시작하기
    • Kaggle에서 파이썬으로 데이터 분석 시작하기
    • 쉘스크립트 개발 시작하기
    • 개발자가 데이터 분석 준전문가 되기
    • 데브쿠마
  • 공지사항

  • 인기 글

  • 태그

    mysql
    build
    SPARK
    k8s
    java
    하이브
    oozie
    yarn
    S3
    emr
    정올
    Python
    HIVE
    하둡
    Tez
    error
    백준
    AWS
    nodejs
    다이나믹
    bash
    airflow
    파이썬
    Linux
    오류
    hbase
    ubuntu
    알고리즘
    HDFS
    Hadoop
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hs_seo
[hive] 하이브에서 insert, delete, update 사용
상단으로

티스토리툴바