하이브를 이용해서 데이터를 처리할 때 파일의 개수와 사이즈가 중요합니다. 동일한 쿼리에서도 설정에 따라 속도차이가 많이 날 수 있습니다.
SELECT A, count(*)
FROM tbl
GROUP BY A
ORDER BY A;
- 칼럼 A로 파티셔닝
- 파티션당 60 여개의 ORC 파일
- 파일당 10~20KB
이 상황에서 TEZ엔진 기본설정으로 쿼리를 실행하면 2148초가 걸립니다. 파일의 사이즈가 작아서 매퍼가 작게 생성되지만, ORC 파일의 특성상 하나의 파일에 많은 데이터가 들어가게 되고, 이 데이터를 모두 처리하는데 많은 메모리가 소모되기 때문입니다.
이런 경우 TEZ엔진의 그룹핑 사이즈를 조절하여 매퍼의 개수를 늘려서, 하나의 매퍼가 처리하는 데이터를 줄이면 속도가 빨라지는 것을 확인할 수 있습니다. 설정 변경을 통해 다음과 같이 시간이 변경되는 것을 확인할 수 있었습니다.
설정 | 크기 | 매퍼개수 | 시간 |
---|---|---|---|
tez.grouping.max-size | 1G | 3 | 2148.009 |
tez.grouping.max-size | 25600 | 8671 | 139.95 |
tez.grouping.max-size | 256000 | 1231 | 51.30 |
TEZ 설정 변경
set tez.grouping.max-size=256000;
set tez.grouping.min-size=128000;
반응형
'빅데이터 > hive' 카테고리의 다른 글
[hive] hive3의 mr 엔진에서 java.lang.IncompatibleClassChangeError 오류 처리 (0) | 2021.05.27 |
---|---|
[hive] hive3에서 TEZ 연동시 java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument 오류 처리 (0) | 2021.05.27 |
[hive] MR, TEZ 실행엔진 라이브러리 업로드 위치 설정 (0) | 2020.09.29 |
[hive] Gzip파일 처리 중 Unexpected end of input stream 오류 해결 방법 (0) | 2020.07.17 |
[hive] 맵 조인 처리 기준 사이즈 확인 (0) | 2020.06.11 |