BIGDATA/HIVE

Hive ACID 적용 방법

옥토캣 2023. 10. 27. 10:29

Hive에 update를 위한 설정 방법

  • hive 버전 : 3.1.2

 

  • hive-site.xml 설정 추가
    <property>
        <name>hive.compactor.initiator.on</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.compactor.worker.threads</name>
        <value>10</value>
    </property>
    <property>
        <name>hive.support.concurrency</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.enforce.bucketing</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.exec.dynamic.partition.mode</name>
        <value>nonstrict</value>
    </property>
    <property>
        <name>hive.txn.manager</name>
        <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
    </property>
  • hive.compactor.initiator.on
    • Compactor 활성화
    • ACID table 정리와 압축 기능 수행
  • hive.compactor.worker.threads
    • Compactor의 작업 스레드 수 설정
  • hive.support.concurrency
    • 병행처리 활성화
    • 사용자가 동시에 쿼리를 실행할 수 있게 지원
  • hive.enforce.bucketing
    • 데이터 버켓팅을 강제화 
    • 테스트 결과 버켓팅 설정을 안 한 테이블도 생성이 됨 ?? 확인 필요 ??
  • hive.exec.dynamic.partition.mode
    • 동적 파티션 삽입 모드 지정 
    • nonstrict로 설정 시 자동으로 파티션을 생성하고, 오버라이딩 지원
  • hive.txn.manager
    • 트랜잭션 관리 매니저 지정
    • 정확한 기능은 확인 필요

 

  • 테스트 테이블 생성 
    • bucket 설정을 해주고 transactional 설정을 해준다
    • 트랜잭션 테이블은 ORC 포맷으로 생성해야 한다
    • 버킷으로 설정된 컬럼은 UPDATE 할수 없다
CREATE TABLE acid_test (
  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%
);