반응형
하이브(Hive) 테이블 join 성능 올리기, 최적화, 튜닝하는 방법
들어가며
하이브에서 테이블 조인의 성능을 올리기 위해서는 다양한 방법이 있지만, 크게 두가지 방법에 대해서 설명을 한다. 하이브에서 큰 두개의 테이블을 만약 그냥 조인을 한다면 쿼리를 날리고 다음 날 아침에 와도, 쿼리는 동작하고 있을 것이다.
두개의 테이블을 조인을 해보자
두개의 테이블을 조인을 하기 전에, 각 테이블의 성격을 알아야 한다. 한개의 테이블의 metadata의 성격이 있는 테이블, 즉 작은 테이블의 사이즈라면, 해당 테이블을 메모리에 올린 이후에, 조인을 하면 성능이 올라갈 것이고, 두 테이블이 너무 커서 메모리에 올리기 어렵다면, 조인할 키를 뭉탱이로 뭉쳐서 뭉탱이 끼리 조인을 하면 빠르게 할 수 있다.
- Map-Side Joins
- join(큰 테이블, 작은테이블)
- 여기서 말하는 작은 테이블을, 지역 정보, 유저 정보 등등
- 여기서 말하는 큰 테이블은, 노출된 로그, 클릭 로그 등등
- 제목 그대로 Map, Reduce에서 Map side에서 조인을 하는 것을 말한다.
- 작은 테이블(ex,지역정보)를 메모리에 올리고 큰테이블에 붙이면 끝
- SMB (Sort Merge Bucket)
- join(큰 테이블, 큰테이블)
- 여기서 말하는 큰 테이블은, 노출된 로그, 클릭 로그 등등
- 여기서 말하는 큰 테이블은, 노출된 로그, 클릭 로그 등등
- 제목 그대로 cluster에 내가 조인할 키를 뭉탱이로 뭉쳐놓고 bucket을 통째로 조인 (느릴 수가 없다)
- 이 방법에서 단점은, 순서가 유지되지 않는다는 사실, 만약 내가 timestamp로 row의 order를 갖고 있고 싶은데, 그 전에 조인할 대상으로 bucket을 생성했기 때문에 순서가 망가진다.
References
- https://cwiki.apache.org/confluence/display/Hive/LanguageManual+JoinOptimization
- https://acadgild.com/blog/map-side-joins-in-hive/
- https://grisha.org/blog/2013/04/19/mapjoin-a-simple-way-to-speed-up-your-hive-queries/
반응형
'빅데이터 > Hive' 카테고리의 다른 글
하이브(Hive)에서 특정 컬럼 제외하고 추출 (0) | 2017.11.29 |
---|---|
하이브(Hive) 테이블 클러스터간 복사 (0) | 2017.11.29 |
하이브(Hive) 테이블 생성 (0) | 2017.11.29 |
하이브(Hive) 테이블 클러스터간 복사 (0) | 2017.11.06 |
하이브(Hive) 테이블 생성 (0) | 2017.11.06 |