본문 바로가기

하이브

Hive 사용할 때 Small File Merge 하기

반응형

하둡 분산파일시스템의 특성

하둡 분산파일시스템(HDFS) 은 블록이라는 단위로 파일을 관리합니다.

이 블록의 디폴트 설정값은 128MB 이며, 하나의 큰 파일을 HDFS 에 저장했을 때 블록의 크기 만큼 여러개의 파일로 나누어져 여러대의 서로 다른 노드에 분산 저장됩니다.

 

하나의 블록 크기가 상대적으로 큰 값을 가지는 이유는, 하둡 이라는 플랫폼이 큰 데이터를 빠르게 처리하기 위해 최적화 되어 있기 때문입니다. 하지만, HDFS 에 작은 크기의 파일들이 많아지게 되면, 데이터를 처리할 때 성능도 저하되며 NameNode 에서 관리할 메타정보의 크기가 커지면서 여러가지 측면에서 바람직하지 않습니다.

 

이러한 현상은 비단 HDFS 뿐만 아니고, AWS 와 같은 클라우드 서비스에서 S3 와 같은 오브젝트 스토리지를 저장소로 사용할 때도 마찬가지 입니다.

 

하이브 파일 병합 설정

따라서 하이브(Hive) 로 데이터를 처리하여 결과를 Writing 할 때, 설정에 정해진 크기로 결과 파일을 병합(merge)해주는 옵션을 적용해 주는것이 좋습니다. 하이브에서 파일 병합과 관련된 옵션은 다음과 같습니다.

hive.merge.mapredfiles=true (default: false)
hive.merge.mapfiles=true (default: true)
hive.merge.tezfiles=true; (default: false)
hive.merge.size.per.task=256000000 (default: 256000000)
hive.merge.smallfiles.avgsize=200000000 (default: 16000000)

위 설정은 아래와 같은 의미를 가집니다.

  • 출력 파일들의 평균 크기가 hive.merge.smallfiles.avgsize 보다 작으면 병합 (기본값 16MB)
  • 합병된 파일의 최대 크기는 hive.merge.size.per.task 의 설정 값을 따름 (기본값 256MB)

매우 유용한 옵션인데, Spark 에는 아직 위와 같은 Small file merge 옵션이 없으며, Hive 가 ETL 처리 시 Spark 대비 갖을 수 있는 장점 중 하나라고 볼 수 있겠습니다.

반응형

'하이브' 카테고리의 다른 글

Hive Metastore contains multiple versions Exception 해결방법  (0) 2022.08.25