[hive] 트랜잭션(Transactional, ACID) 테이블 구성

2018. 5. 21. 14:54·빅데이터/hive

Hive 트랜잭션

하이브는 0.13버전부터 트랜잭션을 지원한다. 파일 수정이 없는 HDFS의 특성상 모든 기능이 완벽하게 지원되지 않고, 기본(default) 트랜잭션 설정은 off로 되어 있다.

  • BEGIN, COMMIT, ROLLBACK은 아직 지원하지 않음, 현재는 auto-commit 만 지원
  • ORC 파일 포맷, 버켓팅 설정이 된 매니지드 테이블에서만 지원
  • Non-ACID 세션에서는 ACID 테이블에 접근 불가

상세한 내용은 Hive Wiki를 참조하면 된다.


트랜잭션 구조

HDFS는 파일의 변경/수정을 지원하지 않는다. 따라서 HDFS에서 데이터의 수정, 삭제를 지원하기 위해서 데이터를 베이스(base) 파일에 기록하고, 트랜잭션이 발생할 때마다 델타(delta) 파일에 내용을 기록한다. 그리고 파일을 읽을 때 베이스 파일에 델타 파일의 내용을 적용하여 수정된 내용을 읽는다.

  • 테이블이나 파티션은 베이스 파일의 집합으로 저장
  • insert, update, delete 에 대해서는 델타 파일로 저장
  • 읽는 시점에 베이스 파일과, 델터 파일을 합쳐서 수정된 내용을 반환


베이스 파일과 디렉토리 구조

파티션이 적용되지 않은 t 라는 테이블을 생성하였을 때 HDFS를 확인하면 구조가 다음과 같다.

  • base* 파일의 집합으로 테이블의 데이터를 생성
  • 내용이 수정될 때 마다 delta* 파일이 생성
hive> dfs -ls -R /user/hive/warehouse/t;
drwxr-xr-x   - ekoifman staff          0 2016-06-09 17:03 /user/hive/warehouse/t/base_0000022
-rw-r--r--   1 ekoifman staff        602 2016-06-09 17:03 /user/hive/warehouse/t/base_0000022/bucket_00000
drwxr-xr-x   - ekoifman staff          0 2016-06-09 17:06 /user/hive/warehouse/t/delta_0000023_0000023_0000
-rw-r--r--   1 ekoifman staff        611 2016-06-09 17:06 /user/hive/warehouse/t/delta_0000023_0000023_0000/bucket_00000
drwxr-xr-x   - ekoifman staff          0 2016-06-09 17:07 /user/hive/warehouse/t/delta_0000024_0000024_0000
-rw-r--r--   1 ekoifman staff        610 2016-06-09 17:07 /user/hive/warehouse/t/delta_0000024_0000024_0000/bucket_00000


Compactor

  • 트랜잭션을 지원하기 위해서 메타스토어에서 수행되고 있는 백그라운드 프로세스
  • 델타 파일이 많이 생기면, 마이너 컴팩션이 발생하여 델타 파일을 하나로 합침
  • 델타 파일이 커지면, 메이저 컴팩션이 발생하여 베이스 파일을 수정
  • Update, Delete 시점마다 MR 잡이 실행되지 않고, 주기적으로 수행되는 컴팩션 작업에의해 MR 잡이 처리


Compaction

  • 마이너 컴팩션(minor compaction)
    • 델타 파일을 모아서 버켓당 하나의 델타 파일로 다시 생성
  • 메이저 컴팩션(major compaction)
    • 베이스 파일과 델타 파일을 새로운 베이스 파일로 생성


트랜잭션 설정

  • 트랜잭션 처리를 위한 테이블 설정

      set hive.support.concurrency=true;
      set hive.enforce.bucketing=true;
      set hive.exec.dynamic.partition.mode=nonstrict;
      set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
    
  • 메타스토어의 compactor 설정

    • hive-site.xml 에 설정
      <property>
        <name>hive.compactor.initiator.on</name>
        <value>true</value>
      </property>
      <property>
        <name>hive.compactor.worker.threads</name>
        <value>3</value>
      </property>
      


테이블 생성

테이블 생성시 다음과 같이 버켓팅 설정과 transactional 설정을 true 로 변경

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

트랜잭션 처리 상황을 확인하기 위해서는 다음의 명령으로 현재 상태를 확인한다.

show transactions;
show compactions;
show locks;


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

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

[hive][error] 셔플 과정에서 발생하는 OutOfMemoryError: Java heap space, error in shuffle in fetcher 오류 해결방법  (0) 2018.07.02
[hive] 하이브 데이터베이스 이름 변경(hive database rename)  (0) 2018.05.25
[hive] Fatal error occurred when node tried to create too many dynamic partitions 오류 처리  (0) 2018.05.11
[hive] Container failed, exitCode=1. Exception from container-launch 오류 해결방법  (0) 2018.04.26
[hive] hive cli 로그 출력하게 설정 변경  (0) 2018.04.25
'빅데이터/hive' 카테고리의 다른 글
  • [hive][error] 셔플 과정에서 발생하는 OutOfMemoryError: Java heap space, error in shuffle in fetcher 오류 해결방법
  • [hive] 하이브 데이터베이스 이름 변경(hive database rename)
  • [hive] Fatal error occurred when node tried to create too many dynamic partitions 오류 처리
  • [hive] Container failed, exitCode=1. Exception from container-launch 오류 해결방법
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
    airflow
    하둡
    정올
    AWS
    HDFS
    S3
    nodejs
    emr
    Linux
    oozie
    build
    ubuntu
    백준
    다이나믹
    SPARK
    java
    Hadoop
    하이브
    알고리즘
    error
    k8s
    yarn
    Tez
    HIVE
    hbase
    bash
    Python
    오류
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hs_seo
[hive] 트랜잭션(Transactional, ACID) 테이블 구성
상단으로

티스토리툴바