본문 바로가기
BigData/Hive

[Hive] 분산 처리에서의 Skew 와 Distinct count의 성능 과의 관계

by 스파이디웹 2023. 2. 12.
728x90

이번 포스트에는 Skew와

 

Skew의 개념에 대해서는 아래의 링크를 참조해주세요.

2021.10.05 - [BigData/Hive] - [Hive] Hive의 성능(테이블) (3) bucketing(버켓팅),skew(스큐), serde(서데), join type(맵 조인, 셔플 조인, 정렬-병합 조인)정리

 

[Hive] Hive의 성능(테이블) (3) bucketing(버켓팅),skew(스큐), serde(서데), join type(맵 조인, 셔플 조인, 정

이번 포스트에는 이전 포스트에서 전부 다루지는 못했던, Hive의 성능에 관한 것들을 위주로 다루어 보겠습니다. *Hive의 개념을 모르신다면 아래를 참조해주세요 2021.07.12 - [BigData] - [Hive] Hive란?(1)

spidyweb.tistory.com


1. 분산처리에서의 Distinct count 성능

분산 시스템에서

'SELECT count(distinct column)'

'SELECT distinct count(*)'

를 실행 하는 것은 다른 처리보다 오래 걸림

 

분산 시스템의 개념을 생각해보면 당연하기도 한데, 중복이 없는 값을 세려면 데이터를 한곳에 모아야 가능하고, 그렇게 되면 분산 처리하기 어려워지기 때문에 다른 구문들보다 성능이 낮음

 

엑세스 로그를 집계함으로써 '일별 고유 유저 수의 추이를 찾는 SQL'로 비교

-- 비효율적인 쿼리
SELECT date, count(distinct user_id) AS users
  FROM access_log
GROUP BY date;

실제로는 GROUP BY 에 의한 그룹화가 분산처리 되므로 distinct count가 분산처리되지 않아도 느리지는 않음

-- 좀 더 효율적인 쿼리
SELECT t.date,
	   count(*) AS users
  FROM (
        SELECT DISTINCT date, -- 최초에 중복을 없앰
               user_id
          FROM acces_log
       ) t
GROUP BY t.date;

2. Skew와 Distinct count의 성능 관계

데이터의 양이 균등하다는 조건에 위의 distinct count는 느리지 않는데, 데이터에 편차(Skew)가 있다면 Distinct count의 성능에는 문제가 생김

 

웹페이지당 고유 방문자 수(웹 페이지의 조회 수에 큰 편차가 있는 경우)

→ 조회 수가 많은 웹페이지에대한 distinct count이 극단적으로 늦어지고, 전체적인 쿼리 실행 시간이 늘어남

위의 최초에 중복을 DISTINCT로 없애는 인라인뷰로써 부하를 분산시키고 데이터의 양을 줄임

 

* JOIN 및 ORDER BY 에 의한 정렬 또한 일분 노드에 데이터가 집중되는 것에 의해 편향이 발생하므로 쿼리 수행이 느린 경우, 로그 확인 및 모니터링이 필요함

 

참조:

빅데이터를 지탱하는 힘(도서)

728x90

댓글