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>