728x90
이번 포스트에는 Skew와
Skew의 개념에 대해서는 아래의 링크를 참조해주세요.
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
'BigData > Hive' 카테고리의 다른 글
[Hive,Spark] Hive와 SparkSQL의 호환성 (0) | 2021.11.30 |
---|---|
[Hive] Hive on Hadoop cluster 실습 + yarn ui 확인하기 (0) | 2021.11.23 |
[HIVE] (Hive 실습)Hadoop ETL with (HiveQL)HQL파일,HQL파일로 hadoop에 job제출하기 (0) | 2021.11.08 |
[BigData] 완전 분산 하둡 클러스터(hadoop cluster)(4개 노드) 에 "Hive" 설치 및 실습 하기 (0) | 2021.10.11 |
[Hive] Hive의 성능(테이블) (3) bucketing(버켓팅),skew(스큐), serde(서데), join type(맵 조인, 셔플 조인, 정렬-병합 조인)정리 (0) | 2021.10.05 |
댓글