빅데이터/Hive

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

쌍쌍바나나 2017. 11. 29. 23:07
반응형

하이브(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/
반응형