하이브(Hive) 조인(Join) 성능 올리기

2021. 5. 6. 02:22 Big Data/Apache Hive

하이브(Hive) 테이블 join 성능 올리기, 최적화, 튜닝하는 방법

 

들어가며

하이브에서 테이블 조인의 성능을 올리기 위해서는 다양한 방법이 있지만, 크게 두가지 방법에 대해서 설명을 한다. 하이브에서 큰 두개의 테이블을 만약 그냥 조인을 한다면 쿼리를 날리고 다음 날 아침에 와도, 쿼리는 동작하고 있을 것이다.

 

두개의 테이블을 조인을 해보자

두개의 테이블을 조인을 하기 전에, 각 테이블의 성격을 알아야 한다. 한개의 테이블의 metadata의 성격이 있는 테이블, 즉 작은 테이블의 사이즈라면, 해당 테이블을 메모리에 올린 이후에, 조인을 하면 성능이 올라갈 것이고, 두 테이블이 너무 커서 메모리에 올리기 어렵다면, 조인할 키를 뭉탱이로 뭉쳐서 뭉탱이 끼리 조인을 하면 빠르게 할 수 있다.

  • Map-Side Joins
    • join(큰 테이블, 작은테이블)
    • 여기서 말하는 작은 테이블을, 지역 정보, 유저 정보 등등
    • 여기서 말하는 큰 테이블은, 노출된 로그, 클릭 로그 등등
    • 제목 그대로 Map, Reduce에서 Map side에서 조인을 하는 것을 말한다.
    • 작은 테이블(ex,지역정보)를 메모리에 올리고 큰테이블에 붙이면 끝
  • SMB (Sort Merge Bucket)
    • join(큰 테이블, 큰테이블)
    • 여기서 말하는 큰 테이블은, 노출된 로그, 클릭 로그 등등
    • 여기서 말하는 큰 테이블은, 노출된 로그, 클릭 로그 등등
    • 제목 그대로 cluster에 내가 조인할 키를 뭉탱이로 뭉쳐놓고 bucket을 통째로 조인 (느릴 수가 없다)
    • 이 방법에서 단점은, 순서가 유지되지 않는다는 사실, 만약 내가 timestamp로 row의 order를 갖고 있고 싶은데, 그 전에 조인할 대상으로 bucket을 생성했기 때문에 순서가 망가진다.

 

References

 

출처 : ourcstory.tistory.com/384?category=717035