2013-10-20 2 views
3

하이브가 구현 한 기본 MapReduce 조인 알고리즘은 무엇입니까? 지도 측 결합, 축소 측, 브로드 캐스트 결합 등입니까?Apache Hive에서 사용되는 기본 MapReduce 조인은 무엇입니까?

그것은 원래 종이에 지정된도에 하이브 위키 조인되지 않습니다

http://cs.brown.edu/courses/cs227/papers/hive.pdf
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins

+0

어떤 하이브 버전입니까? 어느 구성에서 (예 :'hive.auto.convert.join' true 또는 false입니까?) –

+0

하이브 0.12.0. hive.auto.convert.join을 true로 설정하십시오. – Ace

답변

8

'기본'조인은 셔플 조인입니다. 공통 가입으로. JoinOperator.java을 참조하십시오. M/R 셔플을 사용하여 데이터를 분할하고 결합은 축소면에서 수행됩니다. 셔플 중 데이터 크기 복사가 그렇듯이 속도가 느립니다.

더 나은 옵션은 MapJoin입니다 (MapJoinOpertator.java 참조). 이것은 하나의 큰 테이블과 하나 이상의 작은 테이블 (예 : 일반적인 스타 스키마)에 조인 할 경우에만 작동합니다. 작은 테이블을 먼저 스캔하고 해시 테이블을 작성하여 HDFS 캐시에 업로드 한 다음 한 테이블 (큰 테이블) 만 분할하면되는 M/R 작업이 시작됩니다. 셔플 조인보다 훨씬 효율적이지만 M/R 맵 작업의 메모리에 맞추기 위해 작은 테이블이 필요합니다. 일반적으로 하이브 (적어도 0.11 이후)는 MapJoin을 사용하려고 시도하지만 config에 따라 다릅니다.

특수 결합은 버킷 정렬 병합 조인입니다. SMBJoin, SMBJoinOperator.java 참조. 이 작업은 조인 키의 버킷과 일치하는 2 개의 큰 테이블이있는 경우 작동합니다. M/R 작업 스플릿은 정렬 작업을 통해 해시 테이블을 사용하여 조인을 수행 할 수 있도록 조인 키의 오버랩을 보장하는 두 개의 큰 테이블에서지도 작업을 조율 할 수 있도록 정렬 할 수 있습니다.

메모리 부족 조건에서 스큐 조인 (skew join) 지원 및 폴백 (fallback)과 같은 자세한 내용이 있지만 사용자의 요구를 조사하기 시작해야 할 것입니다.

조인 주제에 대한 매우 훌륭한 설명은 Join Strategies in Hive입니다. 모든 것이 빠르게 진화한다는 것을 염두에 두십시오. 2011 년부터는 약간 구형입니다.

+0

감사합니다. 그것이 내가 생각한 것입니다. 테이블 중 하나가 작은 경우 조인은 map-side (MapJoin)에서만 수행 할 수 있습니다. 그러나 내 테이블은 매우 커서 (1 TB 이상) MapJoin을 사용할 수 없습니다. 결과적으로 내 쿼리는 공통 조인 (Reduce-Side 조인)을 사용한다고 가정합니다. – Ace

4

는 하이브 쿼리에 explain를 수행하면 실행 계획을 볼 수 있습니다.

관련 문제