最近遇到一個面試題:
在使用hql的join時,是否就會產生mapreduce job,一個join就會產生一個mapreduce job?
例1:
SELECT a.name,a.age FROM tableA a JOIN tableB b ON a.name=b.name
假如join是重復的條件,會不會產生對應的多個mapreduce job?
例2:
SELECT a.name,a.age FROM tableA a JOIN tableB b ON a.name=b.name JOIN tableB c ON a.name=c.name
uj5u.com熱心網友回復:
一般而言,一個輸入源(表)會有一個Map(Reduce取決于背景關系,你舉例中會沒有Reduce)。等式join下,表A join 表B on a.name = b.name ,AB兩表分別MAP成name -> row的kv格式,在第三個MAP進行Join。也就是name -> a.row,b.row的格式,然后再執行SELECT。如果有GROUP BY則進行Reduce,再SELECT。
每個MapReduce稱之為一個Stage。例1中會有3個Stage,2個輸入Stage,一個Join Stage。
例2會有4個Stage,3個輸入Stage,1個Join Stage。
復雜的join和group by/xxxx by,會涉及到Shuffle和Combine。
另外Hive也會對查詢計劃根據一定規則進行優化,以減少MapReduce(Stage)的數量。
可以執行一段SQL,再在Yarn上面觀察每個Stage的MapReduce作業,以進行理解。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/90846.html
標籤:分布式計算/Hadoop
上一篇:道亨使用教程
