[hive] 작은 사이즈의 파일 머지 설정과 그로 인한 오버헤드

2019. 2. 20. 16:27·빅데이터/hive

하이브에서 FROM INSERT 문을 이용하여 한번에 여러곳에 데이터를 입력할때 다음과 같이 사용합니다.

[FROM INSERT 문을 이용한 입력 예시]

FROM ( SELECT * FROM tbl )
INSERT tableA
INSERT tableB


[TEZ 엔진 실행 결과]

----------------------------------------------------------------------------------------------
        VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED 
----------------------------------------------------------------------------------------------
Map 1 .......... container     SUCCEEDED     13         13        0        0       0       0 
Map 2 .......... container     SUCCEEDED      1          1        0        0       0       0 
----------------------------------------------------------------------------------------------
VERTICES: 02/02  [==========================>>] 100%  ELAPSED TIME: 712.86 s  
----------------------------------------------------------------------------------------------


이때 최종적으로 생성되는 파일의 개수는 매퍼의 개수인 13개입니다. 각 테이블의 위치마다 13개씩 총 26개의 파일이 생성됩니다.


만약 매퍼의 수가 많아진다면 그만큼의 파일이 생성되고 이는 HDFS에 부담이 됩니다. 따라서 파일의 개수를 줄이기 위해 적당한 크기의 파일로 묶는 머지 작업을 추가 하게 됩니다.


[32MB 보다 작은 파일을 모아서 256MB 파일로 묶음]

set hive.merge.mapfiles=true;
set hive.merge.mapredfiles=true;
set hive.merge.tezfiles=true;
set hive.merge.size.per.task=256000000;
set hive.merge.smallfiles.avgsize=32000000;


파일 머지 작업은 파일의 개수를 줄여서 HDFS의 부담을 줄일 수 있지만, 작업에 따라 시간이 오래 걸릴 수 있습니다.

1KB의 파일이 3000~4000 개씩 생성되었을 때 이 파일을 하나로 묶는 작업에 시간이 많이 걸리기 때문입니다.


이때는 hive.optimize.sort.dynamic.partition 옵션을 true로 설정하면 하이브에서 내부적으로 다이나믹 파티션의 데이터를 정렬하여 줍니다. 이 설정으로 리듀서 작업이 생성되고 이 작업에서 파일을 묶어 줍니다.

[hive.optimize.sort.dynamic.partition 옵션 설정]
set hive.optimize.sort.dynamic.partition=true;

----------------------------------------------------------------------------------------------
        VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED 
----------------------------------------------------------------------------------------------
Map 1 .......... container     SUCCEEDED     13         13        0        0       0       0 
Map 6 .......... container     SUCCEEDED      1          1        0        0       0       0 
Reducer 2 ...... container     SUCCEEDED      2          2        0        0       0       1 
Reducer 3 ...... container     SUCCEEDED      2          2        0        0       0       2 
Reducer 4 ...... container     SUCCEEDED      4          4        0        0       0       0 
Reducer 5 ...... container     SUCCEEDED      4          4        0        0       0       0 
----------------------------------------------------------------------------------------------
VERTICES: 06/06  [==========================>>] 100%  ELAPSED TIME: 893.55 s  
----------------------------------------------------------------------------------------------

[셔플 작업 오류시 설정]
set mapreduce.reduce.shuffle.memory.limit.percent=0.5;

하지만 이 소트 작업을 추가하면 리듀서 하나가 매우 오래 동작하는 문제점이 발생할 수 있습니다. 리듀서 하나로 정렬을 수행하여 시간이 많이 발생하는 것으로 추정됩니다. 또는 셔플과정에서 메모리 힙 오류가 발생할 수 있는데 이때는 설정을 추가하여 버퍼보다 로컬 디스크에 빨리 쓰게 하여 해결할 수 있습니다. 

결론적으로 하이브는 맵퍼 단독(mapper only)작업 일때는 매퍼의 개수만큼 파일이 생성되고, 이때 작은 사이즈의 파일이 여러개 생성되어 문제가 발생하면 리듀서 작업이나 파일 머지 작업을 추가하여 해결할 수 있습니다. 리듀서 작업의 추가는 아래와 같이 INSERT 시에 임의의 칼럼에 SORT BY를 추가하는 것입니다. 데이터가 단 하나인 컬럼도 괜찮습니다. 

SORT BY로 인하여 데이터를 리듀서로 모으고 이는 머지작업을 추가하지 않아도, 머지하는 것과 동일한 효과를 줄 수 있습니다. 여기에 머지를 추가하면 머지 작업의 효율이 매우 좋아집니다. 

FROM ( SELECT * FROM tbl )
INSERT tableA SORT BY col1
INSERT tableB SORT BY col2


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

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

[hive] 하이브 3의 특징  (0) 2019.02.25
[hive] CLI 동작중 에러 발생시 무시하기  (0) 2019.02.22
[hive] 테이블 파티션의 로케이션 정보 확인, 생성, 수정 방법  (0) 2019.01.17
[hive] 쿼리 실행중 MetaException 발생시 오류 처리  (0) 2018.12.04
[hive] inline() 함수를 이용하여 JSON 문자열 테이블화 예제  (0) 2018.11.21
'빅데이터/hive' 카테고리의 다른 글
  • [hive] 하이브 3의 특징
  • [hive] CLI 동작중 에러 발생시 무시하기
  • [hive] 테이블 파티션의 로케이션 정보 확인, 생성, 수정 방법
  • [hive] 쿼리 실행중 MetaException 발생시 오류 처리
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에서 파이썬으로 데이터 분석 시작하기
    • 쉘스크립트 개발 시작하기
    • 개발자가 데이터 분석 준전문가 되기
    • 데브쿠마
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hs_seo
[hive] 작은 사이즈의 파일 머지 설정과 그로 인한 오버헤드
상단으로

티스토리툴바