[hive] hive.exec.dynamic.partition.mode, hive.optimize.sort.dynamic.partiton 설정에 따른 성능 저하 확인

2018. 3. 8. 17:31·빅데이터/hive

하이브에 hive.exec.dynamic.partition.mode  옵션은 

다음과 같이 다이나믹 파티션으로 모든 데이터를 입력해야 할 때 nonstrict 모드로 설정해야 할 때 사용한다. 


hive.exec.dynamic.partition.mode
  • Default Value: strict
  • Added In: Hive 0.6.0

In strict mode, the user must specify at least one static partition in case the user accidentally overwrites all partitions. In nonstrict mode all partitions are allowed to be dynamic.

Set to nonstrict to support INSERT ... VALUES, UPDATE, and DELETE transactions (Hive 0.14.0 and later). For a complete list of parameters required for turning on Hive transactions, see hive.txn.manager.



그런데 MR엔진(TEZ엔진도 동일함)을 이용하여 Mapper Only로 동작하는 스태틱 파티션 1개, 다이나믹 파티션 1개로 구성된 

INSERT SELECT 문을 작성하여 테스트 하던 중 해당 설정에 따라 처리 시간이 달라지는 것을 확인하였다. 


스태틱 파티션이 있기 때문에 해당값을 nonstrict 로 설정할 필요가 없었는데, 

기존에 존재하던 설정값을 그대로 이용하여 처리하다보니 발생한 오류였다. 


nonstrict 일경우 Mapper Only 잡이 아니라 Map, Reduce 로 잡이 구성되고 

Reduce 시점에 다음과 같이 Sort 작업이 추가 되어 시간이 급격하게 증가 되었다. 


따라서 hive.exec.dynamic.partition.mode 값은 기본을 strict 로 두고 꼭 필요한 경우에만 nonstrict 모드로 설정하는 것이 좋다. 


Reduce Output Operator

                key expressions: _col26 (type: string)

                sort order: +



원인은 Hive의 Optimizer.java()에서 아래의 구문 때무에 SortedDynPartitonOptimizer() 가 적용 되어서 그렇다. 


    if(HiveConf.getBoolVar(hiveConf, HiveConf.ConfVars.DYNAMICPARTITIONING) &&

        HiveConf.getVar(hiveConf, HiveConf.ConfVars.DYNAMICPARTITIONINGMODE).equals("nonstrict") &&

        HiveConf.getBoolVar(hiveConf, HiveConf.ConfVars.HIVEOPTSORTDYNAMICPARTITION) &&

        !HiveConf.getBoolVar(hiveConf, HiveConf.ConfVars.HIVEOPTLISTBUCKETING)) {

      transformations.add(new SortedDynPartitionOptimizer());

    }


해당 구문때문에 리듀서를 하나만 써서 Sort 하게 되면서 성능이 느려지게 된다. 

정확하게는 다음의 hive.optimize.sort.dynamic.partiton 설정에 의하여 하나의 리듀서만 쓰게 된다. 

따라서 hive.exec.dynamic.partition.mode, hive.optimize.sort.dynamic.partiton 설정은 필요에 따라 설정하는 것이 좋다. 


hive.optimize.sort.dynamic.partition
  • Default Value: true in Hive 0.13.0 and 0.13.1; false in Hive 0.14.0 and later (HIVE-8151)
  • Added In: Hive 0.13.0 with HIVE-6455

When enabled, dynamic partitioning column will be globally sorted. This way we can keep only one record writer open for each partition value in the reducer thereby reducing the memory pressure on reducers.


따라서 다음과 같이 설정하고 작업을 진행하는 것이 좋을 것 같다. 

hive.exec.dynamic.partition.mode=strict;
hive.optimize.sort.dynamic.partiton=false;


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

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

[hive] 메타스토어의 테이블로 파티션 위치 확인하는 방법  (0) 2018.03.19
[hive] drop table 처리중 GC 또는 OutOfMemory 오류가 발생하는 경우  (0) 2018.03.14
[hive] 하이브에서 MR 작업 결과를 merge 하는 방법  (1) 2018.03.07
[hive] 테이블 생성시 예약어를 사용하는 방법  (0) 2018.02.08
[hive] java.lang.OutOfMemoryError: Java heap space 오류 수정  (0) 2018.01.03
'빅데이터/hive' 카테고리의 다른 글
  • [hive] 메타스토어의 테이블로 파티션 위치 확인하는 방법
  • [hive] drop table 처리중 GC 또는 OutOfMemory 오류가 발생하는 경우
  • [hive] 하이브에서 MR 작업 결과를 merge 하는 방법
  • [hive] 테이블 생성시 예약어를 사용하는 방법
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에서 파이썬으로 데이터 분석 시작하기
    • 쉘스크립트 개발 시작하기
    • 개발자가 데이터 분석 준전문가 되기
    • 데브쿠마
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hs_seo
[hive] hive.exec.dynamic.partition.mode, hive.optimize.sort.dynamic.partiton 설정에 따른 성능 저하 확인
상단으로

티스토리툴바