DataPipeline/Hive

Apache Hive - 파일 병합 (File Merge)

wave35 2023. 3. 20. 06:53


[ 파일Merge ]

 

너무 많은 파일이나 중복된 파일이 HDFS블록 크기보다 작을경우 네임노드의 메모리를 소진시킨다.
Hive의 경우 작은 파일을 많이 만들지 않도록 파일병합을 설정할 수 있다.

 

1. Merge 설정

  • SET hive.merge.mapfiles : 맵전용 잡의 작은 파일들을 병합한다.(Default true)
  • SET hive.merge.mapredfiles : 맵리듀스 잡의 결과들을 병합한다.
  • SET hive.merge.size.per.task: 작업 종료시 병합된 파일을 크기를 정의한다(Default 256MB)
  • SET hive.merge.smallfiles.avgsize : 파일 병합을 실행하는 트리거 임계값이다. (Default 16MB)

 

출력파일의 크기가 hive.merge.smallfiles.avgsize보다 작으면 병합을 실시한다.
작업 평균출력파일크기가 이 숫자보다 작을 때( hive.merge.smallfiles.avgsize )

Hive는 출력파일을 더 큰 파일로 병합하는 작업을 시작한다.

 

2. Query를 사용

MapReduce 작업 수를 설정하여 최종 출력파일이 항상 1이 되도록 조정한다.

SET mapred.reduce.tasks=1

 

overwrite로 테이블에 삽입하여 작은 수의 파일들을 병합

INSERT overwrite table <table_name> SELECT * FROM <table_name>;

 

 

참조 : 
https://docs.cloudera.com/documentation/enterprise/5-9-x/topics/introduction_compression_snappy.html