/ PLATFORM

Hive 사용 시 Small File Merge 방법

하이브 설정을 통한 병합

관련 설정 4가지 중에서,

  • hive.merge.mapfiles – Merge small files at the end of a map-only job.
  • hive.merge.mapredfiles – Merge small files at the end of a map-reduce job.
  • hive.merge.size.per.task – Size of merged files at the end of the job.
  • hive.merge.smallfiles.avgsize – When the average output file size of a job is less than this number, Hive will start an additional map-reduce job to merge the output files into bigger files. This is only done for map-only jobs if hive.merge.mapfiles is true, and for map-reduce jobs if hive.merge.mapredfiles is true.

아래와 같이, 기본값이 false 인 hive.merge.mapredfiles 값을 True 로 설정, 나머지 설정의 기본값은 아래를 참조하여 원하는 값으로 변경

  • hive.merge.mapredfiles=true
  • hive.merge.mapfiles=true
  • hive.merge.size.per.task=256000000
  • hive.merge.smallfiles.avgsize=16000000

이렇게 설정하면, 출력 파일들의 평균 크기가 hive.merge.smallfiles.avgsize 보다 작으면 병합을 하며, 합병된 파일의 최대 크기는 hive.merge.size.per.task 의 설정 값을 따르게 된다.

테이블 다시쓰기를 통한 병합

설정을 통해 Reduce Task 수를 1로 설정한다.

set mapred.reduce.tasks=1

테이블 전체 데이터를 조회 후 INSERT OVERWRITE 로 다시쓰기

INSERT OVERWRITE TABLE <table_name> 
SELECT * FROM <table_name>